【发布时间】:2018-04-05 01:51:52
【问题描述】:
我想在 ggplot 密度图中添加额外的几何图形,但不会更改数据的显示限制,也无需通过自定义代码计算所需的限制。举个例子:
set.seed(12345)
N = 1000
d = data.frame(measured = ifelse(rbernoulli(N, 0.5), rpois(N, 100), rpois(N,1)))
d$fit = dgeom(d$measured, 0.6)
ggplot(d, aes(x = measured)) + geom_density() + geom_line(aes(y = fit), color = "blue")
ggplot(d, aes(x = measured)) + geom_density() + geom_line(aes(y = fit), color = "blue") + coord_cartesian(ylim = c(0,0.025))
在第一个图中,拟合曲线(与“测量”数据的拟合非常差)掩盖了测量数据的形状: 我想裁剪绘图以包含第一个几何图形的所有数据,但裁剪拟合曲线,如第二个绘图所示:
虽然我可以使用coord_cartesian 生成第二个图,但这有两个缺点:
- 我必须通过自己的代码计算限制(这很麻烦且容易出错)
- 用我自己的代码计算限制与分面不兼容。不可能 (AFAIK) 使用
coord_cartesian提供每个方面的轴限制。但是,我需要将情节与facet_wrap(scales = "free")结合起来
如果在计算坐标限制时不考虑第二个几何图形,则可以实现所需的输出 - 在自定义 R 代码中不计算限制是否可能?
问题 R: How do I use coord_cartesian on facet_grid with free-ranging axis 相关,但没有满意的答案。
【问题讨论】:
-
我不认为可以在
facet_wrap的上下文中完成。一种解决方法可能是事先手动裁剪数据,这样就没有超出所需绘图限制的数据,因此,ggplot2不会尝试调整轴的大小。笨拙,但在使用facet_wrap时我想不出替代方案。