今天在一个群里有人问这张图,大神回答说是双向柱状图(正负条形图),感觉挺有意思的,于是顺手搜一下教程学习一下。
首先读取下要用到的数据 (我在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)
其中,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)
现在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轴的范围,别的没什么好改的。可以自己动手找别的数据测试一下。
当然这个图片肯定不能放在最终的文章中使用,我们还需要在进行精细的调整。例如增大字体,改变地上地下的透明度,重命名标签和图例,在柱状图上添加数字等等。对于这些精细调整,我建议用eoffice
这个包将图片导出成ppt格式,再在office里面修改,简单的一*。
topptx(p,'双向分组柱状图.pptx',height = 6,width = 10)
这里提醒大家的几点:
1.在ppt更改图片时,有时候需要在 格式
里面取消组合
。
2.图片较大时需要在设计
--幻灯片大小
里面调节图片的大小
3.另存为pdf时,最好保存330ppi.----另存为
--工具
--保存选项
--高级
---不压缩
如下图
结束。
参考资料
- https://blog.csdn.net/weixin_42464553/article/details/112734115
- 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/
- https://mp.weixin.qq.com/s/RFnhHBlSH73bAB1r5S8ZUg