我最近在这里问了一个问题,这个问题允许我使用可自定义的颜色和厚度为geom_point()s 添加边框ggplot2.不可否认,这有点像黑客,我现在遇到了一些麻烦,可能是因为这个原因造成的.边框是通过分层两个geom_point()s 生成的,其中一个是我想要的边框的颜色,它比geom_point()提供"填充" 的边框略大.这是一个可重复的例子:
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,
shape = id,
color = id)) +
geom_line(color = 'gray40') +
geom_point(color = 'gray24',
size = 4) +
geom_point(size = 3) +
guides(shape = guide_legend(override.aes = list(size = 5))) +
scale_color_manual(values = c('lightskyblue1', 'lightpink'),
labels = c('HQ', 'LQ')) +
scale_shape_manual(values = c(15, 17, 0, 2),
labels = c('HQ', 'LQ')) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
因为我希望图例符号比图符号大,所以我用过override.aes().但是,这意味着我创建的"边框"不会出现在图例中:

有没有办法给出多个size参数,override.aes()以便我在图中使用的图层在图例中保持不变(即图例符号也包含"边框")?
geom_point如果您使用带边框和填充的点标记(pch值从21到25;请参阅参考资料),您可以通过一次调用来执行此操作?pch.然后,您可以设置图例标记的大小,override.aes边框和填充将始终正确显示.例如:
ggplot(dat, aes(x = period,
y = values,
group = id,
shape = id,
fill=id)) +
geom_line(color = 'gray40') +
geom_point(size=4) +
guides(shape = guide_legend(override.aes = list(size = 5))) +
scale_fill_manual(values = c('lightskyblue1', 'lightpink'),
labels = c('HQ', 'LQ')) +
scale_shape_manual(values = c(22,24), # These are the marker shapes
labels = c('HQ', 'LQ')) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
这会导致点标记的黑色边框(默认值,但您可以更改它)以及指定的填充颜色.

更新:在回复您的评论时,以下是如何在图例标记上获取黑色边框,而不对原始代码进行任何其他更改:
guides(shape = guide_legend(override.aes =
list(size = 5, shape=c(22,24),
colour="black",
fill=c('lightskyblue1', 'lightpink')))) +
Run Code Online (Sandbox Code Playgroud)