geom_jitter似乎都会删除不同数量的点。我怀疑这是由于过度绘图(堆积点)?例如,如果我创建一次数据帧,然后多次运行ggplot命令,由于缺少数据(范围从0到1+),我将删除不同数量的点。有没有办法确保一致数量的缺失点(或没有)?我试着修改尺寸和抖动宽度/高度,但无济于事。谢谢!
d <- data.frame(a = rnorm(n = 100, mean = 0, sd = 1), b = rnorm(n = 100, mean = 0, sd = 1))
ggplot(d, aes(a,b)) + geom_point(position=position_jitter(width=0.3, height=.3), size=2) + theme(panel.background=element_blank()) + scale_x_continuous(limits=c(-3, 3)) + scale_y_continuous(limits=c(-3, 3))
答案 0 :(得分:1)
抖动会使点超出您指定的范围,并且每次运行都会计算噪声。尝试自己抖动,这样每次都不会改变,或者删除范围限制。
set.seed(0)
d <- data.frame(a = rep(-2:2, each=20), b=rnorm(100))
## Specify your own jitter: 0.1 in width, 1 in height in this example
d <- d + rnorm(nrow(d)*2, 0, sd=rep(c(0.1, 1), each=nrow(d)))
## Always 4 rows removed, unless you rejitter
ggplot(d, aes(a, b)) +
geom_point(size=2) +
theme(panel.background=element_blank()) +
scale_x_continuous(limits=c(-3,3)) +
scale_y_continuous(limits=c(-3,3))
实际上要简单得多,只需set.seed
运行你拥有的东西:)
set.seed(0)
ggplot(d, aes(a,b)) +
geom_point(position=position_jitter(width=0.3, height=.3), size=2) +
theme(panel.background=element_blank()) + scale_x_continuous(limits=c(-3, 3)) +
scale_y_continuous(limits=c(-3, 3))
答案 1 :(得分:1)
另一个选择是不使用1
的{{1}}参数。相反,请使用limits
的{{1}}和scale_x_continuous
参数。这是用于放大绘图的一部分的代码。 x轴和y轴上的极限参数实际上对要绘制的数据进行子集。通常这没什么区别,除非你在谈论包括在情节上看不到的数据的统计摘要。
注意:当您的数据点超出图表时,您不会收到警告。
xlim
答案 2 :(得分:0)
另一个鲜为人知的选项是通过设置越界 (oob) 参数来更改比例处理其边界的方式。
这不是我的想法,但非常受user axeman in this very similar thread的启发。
library(ggplot2)
set.seed(0)
d <- data.frame(a = rnorm(n = 100, mean = 0, sd = 1), b = rnorm(n = 100, mean = 0, sd = 1))
ggplot(d, aes(a,b)) +
geom_point(position=position_jitter(width=0.3, height=.3), size=2) +
theme(panel.background=element_blank()) +
scale_x_continuous(limits=c(-3, 3), oob = scales::squish) +
scale_y_continuous(limits=c(-3, 3), oob = scales::squish)
由 reprex package (v2.0.0) 于 2021 年 4 月 27 日创建