ggplot 轮廓抖动数据点
ggplot outline jitter datapoints
我正在尝试创建一个点抖动的散点图 (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
调色板中用不同的颜色为每个组级别着色。目前的解决方案只是将所有东西都涂成天蓝色。我应该填写什么以确保我使用的是正确的调色板?
您实际上不必使用两层;你可以只使用 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")
我正在尝试创建一个点抖动的散点图 (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
调色板中用不同的颜色为每个组级别着色。目前的解决方案只是将所有东西都涂成天蓝色。我应该填写什么以确保我使用的是正确的调色板?
您实际上不必使用两层;你可以只使用 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")