如何翻转geom_boxplot并重新调整坐标轴范围?
解决ggplot2中
coord_flip()与轴范围调整冲突的问题 问题原因
ggplot2 中每个绘图仅支持一个坐标系,当你先后调用 coord_flip() 和 coord_cartesian() 时,后者会完全替换前者的坐标系,因此会出现提示 Coordinate system already present. Adding new coordinate system, which will replace the existing one.,同时翻转效果失效。
解决方案
无需分开调用两个坐标系函数,直接将轴范围限制整合到 coord_flip() 中即可——coord_flip() 继承自 coord_cartesian(),支持直接设置轴范围参数,同时保持翻转效果。
需要注意轴的对应关系:
- 原绘图中
y = mpg,翻转后会成为图的 x轴,因此要限制 mpg 的范围(0-45),需设置xlim参数; - 原绘图中
x = factor(cyl),翻转后会成为图的 y轴,若需限制类别范围可设置ylim。
示例代码
data %>% ggplot(aes(x = factor(cyl), y = mpg)) + geom_boxplot(outlier.shape = NA) + coord_flip(xlim = c(0, 45))
为什么之前的尝试失败?
- 先后调用两个
coord_*函数时,第二个会覆盖第一个的坐标系,导致翻转效果丢失; - 你尝试在
coord_cartesian()中设置ylim,但此时坐标系已被替换为默认状态,这个ylim对应原 y 轴,但翻转效果已不存在,因此范围限制的位置不符合预期。
内容的提问来源于stack exchange,提问作者tassones
相关产品推荐
相关产品推荐

