Sim*_*mon 4 r scatter-plot ggplot2
我正在尝试创建一个散点图,其中点是抖动的(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")
Run Code Online (Sandbox Code Playgroud)
但是,这导致类似这样的事情:
由于抖动随机偏移数据,因此2个geom_jitters彼此不一致.如何确保轮廓与填充点位于同一位置?
我已经看到了相关的线程(例如,是否有可能以相同的方式抖动两个ggplot geom?),但它们已经很老了,并且不确定是否有任何新内容添加到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)
Run Code Online (Sandbox Code Playgroud)
我的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')
Run Code Online (Sandbox Code Playgroud)

的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")
Run Code Online (Sandbox Code Playgroud)