R语言ggplot2离散刻度x轴双分类均匀排布问题咨询
问题根源
柱形扎堆挤在x轴左侧是冗余注释语句导致的:你的代码里写了3条无实际文本内容的annotate()调用,分别指定了x=3、x=4、x=0.65的坐标位置。ggplot2默认会根据所有图层用到的坐标值自动调整坐标轴范围,原本2个离散分类仅占据x=1、x=2的位置,被这几条空注释把x轴范围拉到了0.65~4的区间,两个柱形自然就全部挤在轴的起始段。
修复方案
直接删除所有label为空的冗余annotate()语句即可,修正后的代码如下:
xlabels<-c("A","B") CTplot <- ggplot(CTsum, aes(x=Treatment, y=FI)) + geom_col(fill="lightsteelblue") + scale_x_discrete(labels= xlabels) + xlab("") + ylab("") + theme( panel.background = element_blank(), axis.line = element_line(colour = "black"), axis.text.x = element_text(size=20, color="black"), axis.text.y = element_text(size=20, color="black"), axis.title.x = element_text(size=25), axis.title.y = element_text(size=25) ) + geom_errorbar(aes(ymin = FI - meanse, ymax = FI + meanse, width=0.2)) + annotate("text", x=1, y=0.84, label="A", size=5) + annotate("text", x=2, y=0.62, label="B", size=5) CTplot
运行后两个分类柱会自动沿x轴均匀排布。
扩展调整技巧
如果后续需要调整x轴两侧的留白距离,不要用空注释占位的方式,直接在scale_x_discrete()中通过expand参数设置即可,示例:
scale_x_discrete( labels = xlabels, expand = expansion(mult = c(0.1, 0.1)) )
参数中两个数值分别控制x轴左侧、右侧的留白比例,按需调整数值就能灵活控制柱形和轴边缘的间距,不会出现范围错乱的问题。

内容的提问来源于stack exchange,提问作者Olivia Markham
相关产品推荐
相关产品推荐

