我正在尝试创建一个散点图,其中点是抖动的(geom_jitter
),但我还想在每个点周围创建一个黑色轮廓。目前我正在通过添加2个geom_jitters来实现它,一个用于填充,一个用于大纲:
beta <- paste("beta == ", "0.15")
ggplot(aes(x=xVar, y = yVar), data = data) +
geom_jitter(size=3, alpha=0.6, colour=my.cols[2]) +
theme_bw() +
geom_abline(intercept = 0.0, slope = 0.145950, size=1) +
geom_vline(xintercept = 0, linetype = "dashed") +
annotate("text", x = 2.5, y = 0.2, label=beta, parse=TRUE, size=5)+
xlim(-1.5,4) +
ylim(-2,2)+
geom_jitter(shape = 1,size = 3,colour = "black")
然而,结果是这样的:
由于抖动会随机偏移数据,因此2个geom_jitters彼此不一致。如何确保轮廓与填充点位于同一位置?
我已经看到有关此问题的线索(例如Is it possible to jitter two ggplot geoms in the same way?),但它们已经很老了,并且不确定是否有任何新内容添加到ggplot来解决此问题
上面的代码如果使用常规geom_jitter
,而不是使用geom_point
,那么上面的代码是有效的,但我有太多的重叠点才有用
编辑:
发布的答案中的解决方案有效。但是,对于我的其他一些图表来说,它并不是很合作,我会用其他变量进行分类并使用它来绘制不同的颜色:
ggplot(aes(x=xVar, y = yVar, color=group), data = data) +
geom_jitter(size=3, alpha=0.6, shape=21, fill="skyblue") +
theme_bw() +
geom_vline(xintercept = 0, linetype = "dashed") +
scale_colour_brewer(name = "Title", direction = -1, palette = "Set1") +
xlim(-1.5,4) +
ylim(-2,2)
我的group
变量有3个级别,我想在brewer Set1
调色板中用不同的颜色为每个组级别着色。目前的解决方案只是为天空蓝色着色。我应该填写什么以确保我使用正确的调色板?
答案 0 :(得分:5)
你实际上不必使用两层;你可以使用带有洞的绘图角色的fill
美学:
# some random data
set.seed(47)
df <- data.frame(x = rnorm(100), y = runif(100))
ggplot(aes(x = x, y = y), data = df) + geom_jitter(shape = 21, fill = 'skyblue')
colour
,size
和stroke
美学让您可以自定义精确外观。
对于分组数据,请将fill
美学设置为分组变量,并使用scale_fill_*
函数设置色阶:
# more random data
set.seed(47)
df <- data.frame(x = runif(100), y = rnorm(100), group = sample(letters[1:3], 100, replace = TRUE))
ggplot(aes(x=x, y = y, fill=group), data = df) +
geom_jitter(size=3, alpha=0.6, shape=21) +
theme_bw() +
geom_vline(xintercept = 0, linetype = "dashed") +
scale_fill_brewer(name = "Title", direction = -1, palette = "Set1")