【问题标题】:How to fill each bar in geom_bar using "dodge"如何使用“闪避”填充 geom_bar 中的每个条
【发布时间】:2020-07-01 21:55:13
【问题描述】:

我正在努力研究如何使用“填充”变量中使用的其他变量填充 geom_bar 中的条形。

这是我的代码:

ggplot() +
  geom_bar(data=df ,width = .9, aes(x = SEM_PRI, y = acum, fill = CLASSI_FIN, group=CLASSI_FIN), color="transparent",position = "dodge",stat="identity") +
  scale_x_continuous(breaks = 1:25,labels = labelss,expand = expansion(add = c(.1, .1))) +
  scale_fill_manual("",c("SRAG-COVID","SRAG-não especificada"), values = c("dodgerblue3","gold"))+
  theme(legend.position = "bottom", legend.direction = "horizontal")

我想用黑色变量acumobito 的值填充上面的每个条,并将该颜色也插入图例中。

这是我想要的手动示例(我只画了最后一个栏,但我想在所有栏中都有这个,涂成黑色的值是变量acumobito

关于我该怎么做的任何提示?

这是我的数据:

df = data.frame(                SEM_PRI = c(9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
                                                                                   21,22,23,24,25,1,2,3,4,5,6,7,8,10),
                CLASSI_FIN = c("SRAG-COVID","SRAG-COVID","SRAG-COVID","SRAG-COVID","SRAG-COVID",           
                               "SRAG-COVID","SRAG-COVID","SRAG-COVID","SRAG-COVID","SRAG-COVID" ,          
                               "SRAG-COVID","SRAG-COVID","SRAG-COVID","SRAG-COVID","SRAG-COVID" ,          
                               "SRAG-COVID","SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada",
                               "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada",
                               "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada",
                               "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada",
                               "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada", "SRAG-não especificada",
                               "SRAG-não especificada", "SRAG-COVID","SRAG-COVID","SRAG-COVID","SRAG-COVID",           
                               "SRAG-COVID","SRAG-COVID","SRAG-COVID","SRAG-COVID","SRAG-COVID"),
                acum = c(1,10,29,62,80,105,129,155,183,237,297,380,477,594,665,679,20,40,57,83,99,119,139,160,
                            197,241,355,667,968,1240,1466,1715,1975,2229,2423,2583,2714,2841,2953,3012,3026,0,0,0,0,0,0,0,
                            0,1),
                acumobito = c(1,2,4,8,11,20,27,29,37,47,53,67,80,89,95,96,1,1,3,4,7,7,9,9,10,11,16,47,86,119,
                              142,186,231,265,289,307,330,354,367,377,379,0,0,0,0,0,0,0,0,1))

colnames(df) = c("SEM_PRI","CLASSI_FIN","acum","acumobito")

labelss = c("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21",
"22","23","24","25")

【问题讨论】:

标签: r ggplot2


【解决方案1】:

在您的情况下,一种似乎可行的简单方法是将黑条覆盖在geom_bar 的顶部。不总是建议使用过度绘图,但在这种情况下似乎确实有效。

ggplot() +
  geom_bar(data=df ,width = .9,
      aes(x = SEM_PRI, y = acum, fill = CLASSI_FIN, group=CLASSI_FIN),
      color="transparent",position = "dodge",stat="identity") +
  geom_bar(data=df, width = .9,
      aes(x = SEM_PRI, y=acumobito, fill='blahblah', group=CLASSI_FIN),
      color='transparent', position='dodge', stat='identity') +
  scale_x_continuous(breaks = 1:25,labels = labels,expand = expansion(add = c(.1, .1))) +
  scale_fill_manual("",c("acumobito", "SRAG-COVID","SRAG-não especificada"),
    values = c("black","dodgerblue3", "gold"))+
  theme(legend.position = "bottom", legend.direction = "horizontal")

值得注意的是,新的geom_bar 需要您原来的geom_bar 之后,以确保黑条绘制在原来的顶部。此外,您需要在aes() 中包含fill="some_text",以确保将新的填充值添加到图例中。请注意,您不需要在geom_bar 调用中包含实际的标签文本,因为它是在scale_fill_manual 中定义的。最后,您需要更改scale_fill_manual 以确保您选择新的条为黑色,并指出应如何在图例中进行标记。我应该注意,图例的顺序并不总是直观的,在这种情况下,新的条形项在其他项之前。您始终可以通过使用命名向量或列表来明确定义,将特定颜色或标签专门分配给特定的图例键。

【讨论】:

  • 我试图用另一个想法来做到这一点,但你的方法对我有用。谢谢。
  • 是的,否则您正在考虑同时使用分组和堆叠 (note the question linked in the question comment)。但是,如果简单的解决方案有效,那么就使用它。请注意您正在过度绘制(在另一个几何图形的顶部绘制,只要您知道它正在发生并且它是否有效就可以了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2012-06-15
相关资源
最近更新 更多