ggplot2绘制热图时如何将y轴刻度标签向热图方向靠近
问题根源
你调整失效的核心原因是自定义theme配置的顺序错误:你将theme_classic()写在了所有自定义theme参数的后面,ggplot2的主题规则是后声明的配置会覆盖前面的同名配置,因此你之前设置的axis.text.y等参数全部被theme_classic()的默认值覆盖,自然不会生效。
解决方法
- 先调用
theme_classic()基础主题,再写你自定义的theme参数,确保自定义配置可以覆盖基础主题的默认值 - 通过
axis.text.y的margin参数将右侧边距设为负值,即可将y轴标签向右侧热图方向移动,负数值越大移动距离越远,可根据实际显示效果调整
修正后的完整代码如下:
ggplot(p_typ_meta, aes(SampleType_Basic, Phylum, fill= Counts)) + geom_tile() + scale_fill_gradient2(low="blue", mid="white",high="red",midpoint=.15) + # 先调用基础主题 theme_classic() + # 再写自定义主题配置,此时会覆盖基础主题的默认值 theme( axis.title.x = element_text(size=13), axis.title.y = element_text(size=13), axis.text = element_text(size=11), # 调整r参数为负值,将标签向右推,数值可按需调整 axis.text.y=element_text(margin = margin(t=0, r=-8, b=0, l=0, unit = "pt")), legend.title.align=0.5, legend.title = element_text(size=13), legend.text = element_text(size=11), plot.title = element_text(hjust=0.5, size=15) ) + labs(x="Sample Type", y="Microbial Phyla", title="Microbial Phyla & Sample Type",fill="Relative Abundance")
其他尝试失效的说明
hjust控制的是文本自身的对齐方式,不会改变文本和坐标轴的相对距离,因此达不到移动标签的效果axis.ticks.margin是ggplot2 3.3.0版本之前的旧参数,新版本已经废弃,替换为axis.ticks.length相关参数scale_y_discrete(expand = c(0,0))调整的是y轴绘图区域和轴边界的间距,不会影响刻度标签的位置
内容的提问来源于stack exchange,提问作者Linton
相关产品推荐
相关产品推荐

