双向分组柱状图

今天在一个群里有人问这张图,大神回答说是双向柱状图(正负条形图),感觉挺有意思的,于是顺手搜一下教程学习一下。

b6ddf0d53217f2e311c9a94761e387b.png
首先读取下要用到的数据 (我在NC的一篇文章中下载的,并根据本篇推送改造的数据)

链接:https://pan.baidu.com/s/1Q8gqFsEWK_P2Woidb56J1w?pwd=kpqc
提取码:kpqc

rm(list = ls())

library(tidyverse)
library(eoffice) ## 将图片导出 ppt格式

setwd("C:/Users/karupin/Desktop/公众号")

df <- read.csv('双向柱状图.csv')

head(df)
image.png

其中,trt 表示施肥与否,position代表地上地下。后面的变量是群落的一些指标,在这不详细解释了。
接着我们要求出每个处理下地上地下分别的平均值和标准误(个人喜欢se,当然sd也可以)

##求每个变量的平均值和标准误

df1 <- df %>% 
  pivot_longer(.,-1:-2,
               names_to = 'variables',
               values_to = 'value') %>% ##宽数据转长数据
  group_by(trt,position,variables) %>% 
  summarise(mean=mean(value),
            se= sd(value)/sqrt(21)) ###21代表n即样本量----  84/2(trt:level是2)/2(positon:level是2)=21

df1$trt<-factor(df1$trt) 
image.png

现在mean和se已经得到了,但是双向柱状图要求一个分组在下面。因此,我们需要把地上地下其中一个的值转化为负值。

#将另一个样本的数据转化为负数,这是必须的一步
df1[which(df1$position == 'under'), c('mean','se')] <- df1[which(df1$position == 'under'), c('mean','se')] * -1

这下就可以画图了

p <- ggplot(df1,aes(variables,mean,fill=trt))+
  geom_col(position = position_dodge(width = 0.5),
         width = 0.5, size = 0.3, colour = 'black') +
  geom_errorbar(aes(ymin = mean - se,
                    ymax = mean + se), 
                width = 0.3, size = 0.3, position = position_dodge(0.5)) +
  theme_bw()+
  theme(axis.text.x=element_text(size=14),
        axis.text.y=element_text(size=14), 
        axis.title.y=element_text(size = 18), 
        axis.title.x=element_text(size = 18),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())+
  labs(x = '', y = '') +
  geom_hline(yintercept = 0, size = 0.3) +
  scale_y_continuous(breaks = seq(-3, 3, 1), 
                     labels = as.character(abs(seq(-3, 3, 1))),
                     limits = c(-3, 3)) +
  annotate('text', label = 'Overground', 1, 2.2) +
  annotate('text', label = 'Undergroud', 1, -2.2)
p

画图的细节没什么好说的,大家可以一步一步加载的看每一行运行之后会有什么变化。大家在使用自己的数据时要灵活调整。个人觉得以上code除了换df1,variables,trt, Overground,Undergroud这些必要的数据、变量名称以及y轴的范围,别的没什么好改的。可以自己动手找别的数据测试一下。

image.png

当然这个图片肯定不能放在最终的文章中使用,我们还需要在进行精细的调整。例如增大字体,改变地上地下的透明度,重命名标签和图例,在柱状图上添加数字等等。对于这些精细调整,我建议用eoffice这个包将图片导出成ppt格式,再在office里面修改,简单的一*。

topptx(p,'双向分组柱状图.pptx',height = 6,width = 10)

这里提醒大家的几点:
1.在ppt更改图片时,有时候需要在 格式里面取消组合
2.图片较大时需要在设计--幻灯片大小里面调节图片的大小
3.另存为pdf时,最好保存330ppi.----另存为--工具--保存选项--高级---不压缩如下图

image.png

结束。

参考资料

  1. https://blog.csdn.net/weixin_42464553/article/details/112734115
  2. https://www.jingege.wang/2022/03/09/ggplot2-%e9%87%91%e5%ad%97%e5%a1%94%e5%9b%be%e5%bd%a2%ef%bc%88%e5%8f%8c%e5%90%91%e6%9f%b1%e7%8a%b6%e5%9b%be%ef%bc%89/
  3. https://mp.weixin.qq.com/s/RFnhHBlSH73bAB1r5S8ZUg

你可能感兴趣的:(双向分组柱状图)