使用ggplot2的facet_wrap函数拆分绘图时的异常问题求助
解决facet_wrap子图x轴显示所有基因型的问题
问题根源
你现在把x轴映射成了factor(genotype),同时又按genotype分面。虽然每个子图只对应单个基因型的数据,但genotype作为因子的所有水平(PsbS和T259D)都存在于整个数据集里,所以x轴会默认显示所有因子水平,哪怕当前子图没有对应数据。
正确解决方案
把x轴的映射从genotype换成line——毕竟每个子图要展示的是对应基因型下不同品系(line)的数据,这样每个子图的x轴只会显示当前基因型对应的line,完全符合你的需求。
修正后的完整代码
library(readr) library(ggplot2) # 读取数据 RE <- read_csv("Cq.csv") # 绘图 ggplot(data=RE, mapping = aes(x = line, y = cq, fill= line))+ geom_bar(stat = "identity", position = "dodge")+ geom_errorbar(aes(ymin=cq-SEM, ymax=cq+SEM), width=.2, position=position_dodge(width= 0.9))+ theme_bw()+ theme(text = element_text(size = 15))+ facet_wrap(~genotype)
额外说明
- 原代码里的
n geom_errorbar是笔误,已经帮你去掉了多余的n - 如果非要保留x轴为
genotype,可以给facet_wrap加上scales="free_x"参数,强制每个子图的x轴只显示当前存在的水平,但这种方式每个子图x轴只有一个标签,展示效果远不如用line作为x轴直观:ggplot(data=RE, mapping = aes(x = factor(genotype), y = cq, fill= line))+ geom_bar(stat = "identity", position = "dodge")+ geom_errorbar(aes(ymin=cq-SEM, ymax=cq+SEM), width=.2, position=position_dodge(width= 0.9))+ theme_bw()+ theme(text = element_text(size = 15))+ facet_wrap(~genotype, scales="free_x")
内容的提问来源于stack exchange,提问作者wychin
相关产品推荐
相关产品推荐

