在R中的同一ggplot中多次使用geom_col?

问题描述 投票:0回答:2

我有以下数据

# A tibble: 7 x 5
# Groups:   date, station [7]
  date  station  days mean3y environ                                    
  <fct> <chr>   <int>  <dbl> <fct>                                      
1 2019  41B004      6   8.33 Urbain avec influence modérée du trafic    
2 2019  41B011     21  21.3  Urbain avec très faible influence du trafic
3 2019  41MEU1      5  NA    Urbain avec faible influence du trafic     
4 2019  41N043      9  10    Industriel avec influence modérée du trafic
5 2019  41R001     13  11.3  Urbain avec influence modérée du trafic    
6 2019  41R012     14  16.3  Urbain avec très faible influence du trafic
7 2019  41WOL1      3   3.67 Urbain avec influence modérée du trafic

用以下ggplot代码绘制

ggplot(data, aes(x = reorder(station, -days), 
                 y = days, fill = environ)) + 
  geom_col(width = 0.5, colour = "black", size = 0.5) + 
  guides(fill = guide_legend(ncol = 2)) +
  geom_text(aes(label = days), 
            vjust=-0.3, color="black", size = 3.5) +
  geom_hline(aes(yintercept = 25), 
             linetype = 'dashed', colour = 'red', size = 1) +
  labs(x = '', y = bquote("Nombre de jours de dépassement de NET60" ~ O[3] ~ "en 2019")) +
  theme_minimal() + 
  theme(legend.position="bottom", legend.title = element_blank(), 
        legend.margin=margin(l = -2, unit='line'),
        legend.text = element_text(size = 11),
        axis.text.y = element_text(size = 12), 
        axis.title.y = element_text(size = 11), 
        axis.text.x = element_text(size = 11),
        panel.grid.major.x = element_blank()) + 
  geom_hline(yintercept = 0)

生成此figure

我还要在该图中为每个x值使用另一个mean3y,例如days添加变量geom_col,>]

p <- ggplot(data, aes(x = reorder(station, -days), 
                      y = days, fill = environ)) + 
  geom_col(width = 0.5, colour = "black", size = 0.5) + 
  guides(fill = guide_legend(ncol = 2)) +
  geom_text(aes(label = days), 
            vjust=-0.3, color="black", size = 3.5) +
  geom_col(aes(x = reorder(station, -days), 
               y = mean3y, fill = environ), 
           inherit.aes = FALSE,
           width = 0.5, colour = "black", size = 0.5) +
  geom_hline(aes(yintercept = 25), 
             linetype = 'dashed', colour = 'red', size = 1) +
  labs(x = '', y = bquote("Nombre de jours de dépassement de NET60" ~ O[3] ~ "en 2019")) +
  theme_minimal() + 
  theme(legend.position="bottom", 
        legend.title = element_blank(), 
        legend.margin=margin(l = -2, unit='line'),
        legend.text = element_text(size = 11),
        axis.text.y = element_text(size = 12), 
        axis.title.y = element_text(size = 11), 
        axis.text.x = element_text(size = 11),
        panel.grid.major.x = element_blank()) + 
  geom_hline(yintercept = 0)

但是,尽管使用了position = "dodge",但由于两个变量都重叠,所以无法达到预期的效果。

请问有没有办法做到这一点?非常感谢。

我有以下数据#小标题:7 x 5#组:日期,站点[7]日期站点天数平均3y周围环境... [] []

r ggplot2 fill geom-col
2个回答
0
投票
位置闪避仅在单层中起作用,而在多层之间不起作用。您可以通过手动轻推它们或格式化数据以使其能够被躲避的方式来解决问题。下面的代码都提供了这两个示例。

您的数据很难复制到我的R会话中,并且您的代码过于复杂,无法证明问题,因此我将两者保持在最低水平。


0
投票
实现此目的的一种方法是将数据转换为长格式,以便我们要绘制的变量是一个变量的类别。由于我们现在在x轴上有多个变量,因此我将测站的reprex package和新定位的var映射到了interaction,并使用一些辅助函数来获得漂亮的标签,仅显示测站的名称,同时将名称条上方标签中的var变量。
© www.soinside.com 2019 - 2024. All rights reserved.