geom_pointrange设置坐标轴限制后部分线段被截断的解决方法咨询
geom_pointrange设置坐标轴限制后部分线段被截断的解决方法咨询
我用ggplot的geom_pointrange画图,代码如下:
# Create a simple example dataset df <- data.frame( trt = factor(c(1, 1, 2, 2)), resp = c(1, 5, 3, 4), group = factor(c(1, 2, 1, 2)), upper = c(1.1, 5.3, 3.3, 4.2), lower = c(0.8, 4.6, 2.4, 3.6) ) p <- ggplot(df, aes(trt, resp, colour = group)) p + geom_pointrange(aes(ymin = lower, ymax = upper)) # 这一行设置y轴上限后出现问题 p + geom_pointrange(aes(ymin = lower, ymax = upper)) + scale_y_continuous(limits = c(NA, 5.2))第一张图是正常显示的效果,第二张图里trt1、group2那个点的上半段线段被切掉了,但我想让它从ymin一直显示到图表的y轴上限,该怎么解决呢?
嗨,我完全懂你的困扰!问题出在你用的scale_y_continuous(limits)上——这个函数会直接把超出你设置范围的数据过滤掉,而不是仅仅隐藏超出部分的显示。所以trt=1、group=2那个点的upper值是5.3,超过了5.2的上限,这部分数据就被删掉了,自然线段就被截断了。
解决方法很简单,换成coord_cartesian(ylim = c(NA, 5.2))就可以啦!这个函数只是调整图表的显示窗口,不会修改或过滤原始数据,所以你的点范围线段会完整地从ymin延伸到y轴的显示上限,不会被截断。
修改后的代码是这样的:
p + geom_pointrange(aes(ymin = lower, ymax = upper)) + coord_cartesian(ylim = c(NA, 5.2))
你可以试试这个,这样那个被截断的线段就会显示到5.2的位置啦~如果之后你还需要调整y轴的刻度标签,可以同时用scale_y_continuous来设置刻度,再配合coord_cartesian设置显示范围,两者不会冲突哦。
备注:内容来源于stack exchange,提问作者iago
相关产品推荐
相关产品推荐

