在ggplot2中很容易出现一个修改坐标轴范围的问题,喜欢用ggplot2画图的需要注意一下。ylim和coord_cartesian都是调整坐标轴范围,但是它们的结果是有可能不一样的,看下面的一个例子:
data(diamonds)
p <- ggplot(data = diamonds, aes(x = cut, y = table, color = cut)) + geom_boxplot()
p
# 截取
p + ylim(c(0,60))
第二行原图:
截取0到60的部分:
可以看到第二张图跟原图是不一样的,比如Fair的第一个box原数据最高是超过60的,但是截取之后不到60了。这是一个不太容易注意到的坑。这里是因为ylim是直接处理的数据导致的,比如例子中不在范围的数据就直接被移除。同等操作应该用coord_cartesian来实现。coord_cartesian指定参数控制图形特定区域放大显示,只影响图形展示,不影响内部数据的值。即使用原数据作图,再对图形进行变动。内部参数xlim 和 ylim 各接一个二元数值向量,控制显示的区域范围,原理不是截取,而是放大该区域,原有图形不变。
p + + coord_cartesian(ylim = c(0,60))