分组柱状图的绘制可以基于ggplot2,具体可以参考: 分组柱状图--ggplot2 。
如何针对分组柱状图添加误差线并合理调整位置呢?主要基于geom_errorbar及其参数position进行细节调整。
譬如基于上述链接数据增加一列标准差SD,进行演示:
1、案例数据:
> dat
type Sample Num SD
1 A sample1 90 1.0
2 B sample1 34 2.0
3 C sample1 56 1.2
4 D sample1 99 2.0
5 E sample1 15 2.4
6 A sample2 50 1.0
7 B sample2 20 1.0
8 C sample2 24 1.0
9 D sample2 70 1.8
10 E sample2 14 1.5
2、于柱状图上添加geom_errorbar(不控制位置)
针对geom_errorbar设置如下:width是误差线上下端宽度,size是粗细
geom_errorbar(aes(ymin=(Num-SD),ymax=(Num+SD)),width=0.2,size=0.02)
全部绘图代码如下:
p = ggplot(dat, aes(x = type,y = Num,fill = Sample))+
#####这部分的position = "dodge",并排肩并肩的柱状图
geom_bar(stat ="identity",width = 0.6,position = "dodge")+
geom_errorbar(aes(ymin=(Num-SD),ymax=(Num+SD)),width=0.2,size=0.02)+
scale_fill_manual(values = c("red","blue"))+ #########设定颜色
labs(x = "",y = "", title = "test")+ ############坐标标签和图片title
geom_text(aes(label = dat$Num),position=position_dodge(width = 0.5),size = 5,vjust = -0.25)+ ###########设置柱子上的标签文字,文字的position_dodge(width=0.5)设置,保证分隔宽度。
guides(fill = guide_legend(reverse = F))+ ##############图例顺序反转
theme(plot.title = element_text(size = 25,face = "bold", vjust = 0.5, hjust = 0.5), ######图片title文字大小位置
legend.title = element_blank(), ##########图例名称为空
legend.text = element_text(size = 18, face = "bold"), ##########图例文字大小
legend.position = 'right', ############图例位置
legend.key.size=unit(0.8,'cm')) #############图例大小
print(p)
结果显示如下:误差线默认位置position="identity",也就是在该组中间,导致组内多个误差线按照高低排布,而不是在对应的柱子中间。
3、控制位置position="dodge" 与柱状图位置参数一致
绘图代码如下:
p = ggplot(dat, aes(x = type,y = Num,fill = Sample))+
#####这部分的position = "dodge",并排肩并肩的柱状图
geom_bar(stat ="identity",width = 0.6,position = "dodge")+
geom_errorbar(aes(ymin=(Num-SD),ymax=(Num+SD)),width=0.2,size=0.02,position = "dodge")+
scale_fill_manual(values = c("red","blue"))+ #########设定颜色
labs(x = "",y = "", title = "test")+ ############坐标标签和图片title
geom_text(aes(label = dat$Num),position=position_dodge(width = 0.5),size = 5,vjust = -0.25)+ ###########设置柱子上的标签文字,文字的position_dodge(width=0.5)设置,保证分隔宽度。
guides(fill = guide_legend(reverse = F))+ ##############图例顺序反转
theme(plot.title = element_text(size = 25,face = "bold", vjust = 0.5, hjust = 0.5), ######图片title文字大小位置
legend.title = element_blank(), ##########图例名称为空
legend.text = element_text(size = 18, face = "bold"), ##########图例文字大小
legend.position = 'right', ############图例位置
legend.key.size=unit(0.8,'cm')) #############图例大小
print(p)
结果如下图,显示组内误差线按照高低并列分布,但并未与柱子匹配正确
4、控制position=position_dodge(width=0.6), 误差线整体间隔和组内柱子整体宽度width一致
绘图代码如下:
p = ggplot(dat, aes(x = type,y = Num,fill = Sample))+
#####这部分的position = "dodge",并排肩并肩的柱状图
geom_bar(stat ="identity",width = 0.6,position = "dodge")+
geom_errorbar(aes(ymin=(Num-SD),ymax=(Num+SD)),width=0.2,size=0.02,position = position_dodge(width = 0.6))+
scale_fill_manual(values = c("red","blue"))+ #########设定颜色
labs(x = "",y = "", title = "test")+ ############坐标标签和图片title
geom_text(aes(label = dat$Num),position=position_dodge(width = 0.5),size = 5,vjust = -0.25)+ ###########设置柱子上的标签文字,文字的position_dodge(width=0.5)设置,保证分隔宽度。
guides(fill = guide_legend(reverse = F))+ ##############图例顺序反转
theme(plot.title = element_text(size = 25,face = "bold", vjust = 0.5, hjust = 0.5), ######图片title文字大小位置
legend.title = element_blank(), ##########图例名称为空
legend.text = element_text(size = 18, face = "bold"), ##########图例文字大小
legend.position = 'right', ############图例位置
legend.key.size=unit(0.8,'cm')) #############图例大小
print(p)
结果如下:
如果想提升自己的绘图技能,我们推荐:R语言绘图基础(ggplot2)
1. 文章越来越难发?是你没发现新思路,基因家族分析发2-4分文章简单快速,学习链接:基因家族分析实操课程、基因家族文献思路解读
2. 转录组数据理解不深入?图表看不懂?点击链接学习深入解读数据结果文件,学习链接:转录组(有参)结果解读;转录组(无参)结果解读
3. 转录组数据深入挖掘技能-WGCNA,提升你的文章档次,学习链接:WGCNA-加权基因共表达网络分析
4. 转录组数据怎么挖掘?学习链接:转录组标准分析后的数据挖掘、转录组文献解读
5. 微生物16S/ITS/18S分析原理及结果解读、OTU网络图绘制、cytoscape与网络图绘制课程
6. 生物信息入门到精通必修基础课:linux系统使用、perl入门到精通、perl语言高级、R语言入门、R语言画图
7. 医学相关数据挖掘课程,不用做实验也能发文章:TCGA-差异基因分析、GEO芯片数据挖掘、GEO芯片数据标准化、GSEA富集分析课程、TCGA临床数据生存分析、TCGA-转录因子分析、TCGA-ceRNA调控网络分析
8.其他,二代测序转录组数据自主分析、NCBI数据上传、二代测序数据解读
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!