【发布时间】:2015-03-18 18:17:04
【问题描述】:
在尝试在ggplot2 中为geom_point()s 设置边框时,this question 是一个非常有用的起点。我最终选择了@joran(第二个答案)概述的方法,因为它允许我获得更小的轮廓(这是更可取的,因为这些点最终在最终产品中会非常小)。
但是,我在使用这种技术的细微变化时遇到了麻烦。我有两种不同的形状要勾勒出来,这给我带来了一些问题。这是一个可重现的示例:
require('ggplot2')
values <- rnorm(n = 10, mean = 1, sd = 0.5) + c(1:10)
df <- data.frame(id = rep(c('hq', 'lq'), each = 5),
values = values,
period = rep(c(1:5), 2))
plot <-
ggplot(df, aes(x = period,
y = values,
group = id)) +
geom_line(color = 'gray40') +
geom_point(aes(shape = id,
color = id),
size = 3) +
geom_point(aes(shape = id),
color = 'gray70',
size = 3,
show_guide = FALSE) +
scale_color_manual(values = c('lightskyblue1', 'lightpink'),
labels = c('HQ', 'LQ')) +
scale_shape_manual(values = c(15, 16, 0, 1),
labels = c('HQ', 'LQ')) +
theme_bw()
这最终给出了一个看起来像这样的情节:
我不明白为什么这些点会变成纯灰色(这是我希望蓝色和粉红色点周围的边框的颜色)。任何帮助保留与形状类型匹配的灰色边框的蓝色和粉红色填充将不胜感激!
编辑:如果不清楚,我知道我可以使用pch 21-25 来实现边框。但是,这些边框太大,它们的厚度不可修改(据我所知)。结果,我尝试将两个geom_points()s 分层,一个填充另一个未填充,以实现边框的外观。我可以通过像这样分层另一组geom_point()s 来实现这一点:
plot <-
ggplot(df, aes(x = period,
y = values,
group = id)) +
geom_line(color = 'gray40') +
geom_point(aes(shape = id,
color = id),
size = 3) +
geom_point(shape = 1,
color = 'gray70',
size = 3,
show_guide = FALSE) +
scale_color_manual(values = c('lightskyblue1', 'lightpink'),
labels = c('HQ', 'LQ')) +
scale_shape_manual(values = c(15, 16),
labels = c('HQ', 'LQ')) +
theme_bw()
这里的问题是每个“边框”都不匹配对应的形状,生成的图像是这样的:
【问题讨论】:
-
只有点字符 (pch) 21 到 25 支持填充和颜色。您需要使用这些符号,并指定填充美学。
-
@MatthewPlourde 我知道我可以使用 pch 21 到 25,但是这些点周围的边界太大了,因为正如我所提到的,最终产品会有非常小的点。我想要做的是第二层 geom_point()s 来实现相同的效果——一个实心的,一个填充的,这样我就可以实现边框的外观。
-
您需要在第一个
geom_point中也包含aes(shape = id),否则R不知道灰点需要具有哪种形状。检查我编辑的答案