在ggplot2中使用带有分层符号(R)的override.aes()

tha*_*one 4 r ggplot2

我最近在这里问了一个问题,这个问题允许我使用可自定义的颜色和厚度为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()以便我在图中使用的图层在图例中保持不变(即图例符号也包含"边框")?

eip*_*i10 6

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)