【发布时间】:2017-01-20 13:53:16
【问题描述】:
我正在尝试使用 theme() 和 guides() 函数使图例键与绘图完全匹配。
从这个情节开始:
library(ggplot2)
data(mpg)
mpg$year <- as.numeric(mpg$year)
means <- tapply(mpg$displ, list(mpg$year), FUN = mean)
means <- as.data.frame(means)
means$year <- as.numeric(row.names(means))
names(means)[1] <- "displ"
p1 <-
ggplot(mpg, aes(x = year, y = displ)) +
geom_jitter(aes(color = "points")) +
geom_errorbar(data = means, aes(ymin = displ, ymax = displ,
color = "mean")) +
scale_x_continuous(breaks = c(1998, 2008))
p1
我得到一个情节,我可以使用以下方法修改图例键:
p1 + theme(legend.key = element_rect(fill = NA),
legend.title = element_blank()) +
guides(color = guide_legend(override.aes =
list(shape=c(NA, 16), linetype=c(1, 0), fill = c(NA, NA))))
但是,当情节还包含geom_ribbon() 时,同样的方法会失败:
p2 <-
ggplot(mpg, aes(x = year, y = displ)) +
geom_jitter(aes(color = "points")) +
geom_ribbon(aes(ymin = 3, ymax = 4, color = "ribbon"),
fill = "green", alpha = 0.5) +
geom_errorbar(data = means, aes(ymin=displ, ymax=displ,
color="mean")) +
scale_x_continuous(breaks = c(1998, 2008))
p2 + theme(legend.key = element_rect(fill = NA),
legend.title = element_blank()) +
guides(color = guide_legend(override.aes =
list(shape=c(NA, 16, NA), linetype=c(1, 0, 0),
fill = c(NA, NA, "green"))))
要明确:我希望代表平均值的图例键显示为一条直的红线,就像在第一个图中一样,没有边框,没有对角线。
(我意识到我可以使用 stat_summary() 而不是创建单独的数据框,但这不适用于我的实际项目)。
感谢您的建议,
拉斯
【问题讨论】:
-
您需要设置
aes中的功能区颜色吗? -
我想是的。我需要一个图例来说明功能区显示的内容,据我所知,唯一的方法是在
aes中创建一个常量color -
您可以使用填充代替,这样可以避免图例中的线条。
-
您在
aes()中用geom_ribbon()填充而不是颜色?对我来说,这会产生错误吗? -
更准确地说:使用填充而不是颜色完全失去了功能区图例