【问题标题】:Combining geom_bar with geom_line in one plot将 geom_bar 与 geom_line 组合在一个图中
【发布时间】:2021-08-06 13:56:03
【问题描述】:

我尝试将 2 个地块合并为 1 个地块。但是 geom_line 没有出现,并且右边的 y 轴不在 % 中。

geom_bar 显示了我想要的,但 geom_line 没有显示在 ggplot 中。 geom_line是一个%,表示BV和FV的关系,%=BG/FV。

我的表格在 Excel 中的样子。

欧洲人的逗号:

Aar Type mia_kr BG
2004 FV 1918050 0,489221
2004 BG 938350,0583
2005 FV 2312210 0,447918
2005 BG 1035680,125
2006 FV 2842071 0,416046
2006 BG 1182431,742
2007 FV 2910107 0,447245
2007 BG 1301530,525

所有不使用逗号的人:

Aar Type mia_kr BG
2004 FV 1918050 0.489221
2004 BG 938350.0583
2005 FV 2312210 0.447918
2005 BG 1035680.125
2006 FV 2842071 0.416046
2006 BG 1182431.742
2007 FV 2910107 0.447245
2007 BG 1301530.525

我的代码:

    library(ggplot2)
SAMLET <- data.frame(Aar=c(2004, 2004, 2005, 2005, 2006, 2006, 2007, 2007),
                  Type=c(FV, BG, FV, BG,FV, BG,FV, BG,),
                  mia_kr=c(1918050,938350.0583, 2312210, 1035680.125, 2842071, 1182431.742, 2910107, 1301530.525))
SAMLET_2 <- data.frame(Aar=c(2004, 2005, 2006, 2007,),
BG=c(0.489221, ,0.447918, ,0.416046, , 0.447245, ))



ggplot() + 
  geom_bar(mapping = aes(x= SAMLET$Aar, y= SAMLET$mia_kr, fill = SAMLET$Type), stat="identity",position = "identity")+
  geom_line(mapping = aes(x= SAMLET_2$Aar, y = SAMLET_2$BG),size = 2, color = "blue") +
  scale_y_continuous(labels = scales::format_format(big.mark = ".", decimal.mark = ",", scientific = FALSE),
                     sec.axis = sec_axis(~ ./4,labels = scales::format_format(big.mark = ".", decimal.mark = ",", scientific = FALSE) ))

Shows the barplots with 2 y-axis

How it should look like

【问题讨论】:

  • 请提供您使用的所有代码,包括用于将数据读入 R 的代码。数据(最好是重现问题所需的最简单的)格式,以便我们任何人尝试回答您的问题可以在本地重现问题。请同时简化代码,以便与触发您描述的问题无关的任何内容都保留为默认值。
  • 现在应该可以本地制作了。只需将表格复制粘贴到您自己的 excel 文件中即可。
  • 现在应该修复了。

标签: r ggplot2


【解决方案1】:

你可以试试

ggplot(df, aes(x = Aar)) + 
   geom_col(aes(y = mia_kr, fill = Type)) + 
   geom_line(aes(y = BG*max(mia_kr), group =Type))  +
   scale_y_continuous(labels = scales::format_format(big.mark = ".", decimal.mark = ",", scientific = FALSE),
                     sec.axis = sec_axis(~ ./max(df$mia_kr)))

请注意,行值是根据最大 mia_kr 值放大的。

【讨论】:

  • 这些条不应加在一起,而应相互叠放。显示FV大于BG。
猜你喜欢
  • 2020-02-05
  • 1970-01-01
  • 2015-06-30
  • 2023-02-03
  • 2020-02-02
  • 2016-12-02
  • 2021-08-27
  • 2019-10-11
  • 1970-01-01
相关资源
最近更新 更多