在ggplot中添加手动图例

6

我查看了之前类似的问题,并且(我认为)已经按照建议进行了所有操作,但仍然无法得到所需的输出。

我有很多分布,我正在通过facetted图形来显示它们。然后我画出垂直线,代表不同的干预措施。

我试图显示一个包含分布填充颜色以及额外线条的颜色的图例。据我所知,我做的一切都是正确的(在aes()中设置颜色命令,使用scale_colour_manual()定义图例等)。但我仍然只得到填充颜色的图例。

以下是我的代码:

ggplot(modCosts, aes(x=cost)) + geom_density(aes(fill=group)) + theme_bw() +
  facet_wrap(~ country, scales="free") + scale_x_continuous(label = dollar) +
  scale_fill_brewer(palette = "RdGy", name = "Income group", labels = c("HIC" = "High income", "UMIC" = "Upper-middle income", "LIC" = "Low income")) + 
  labs(y = "Density", x = "Cost", title = "Medical costs of surgery\nActual vs. modeled") + 
  geom_vline(data = surgCosts, aes(xintercept = CS.tert.lo, color = "red4")) +
  geom_vline(data = surgCosts, aes(xintercept = CS.tert.hi, color = "red4")) + 
  geom_vline(data = surgCosts, aes(xintercept = CS.prim.lo, color = "red4"), lty = "dashed") + 
  geom_vline(data = surgCosts, aes(xintercept = CS.prim.hi, color = "red4"), lty = "dashed") + 
  geom_vline(data = surgCosts, aes(xintercept = Lap.tert.lo, color = "deepskyblue")) +
  geom_vline(data = surgCosts, aes(xintercept = Lap.tert.hi, color = "deepskyblue")) + 
  geom_vline(data = surgCosts, aes(xintercept = Lap.prim.lo, color = "deepskyblue"), lty = "dashed") + 
  geom_vline(data = surgCosts, aes(xintercept = Lap.prim.hi, color = "deepskyblue"), lty = "dashed") + 
  geom_vline(data = surgCosts, aes(xintercept = Fx.tert.lo, color = "yellowgreen")) + 
  geom_vline(data = surgCosts, aes(xintercept = Fx.tert.hi, color = "yellowgreen")) + 
  scale_color_manual(name = "Reported cost", values = c("red4" = "red4", "deepskyblue" = "deepskyblue", "yellowgreen" = "yellowgreen"),
                      labels = c("Int1", "Int2", "Int3")) +
  theme(axis.ticks = element_blank(), axis.text.y = element_blank(), legend.position = "right") 

这是我得到的输出结果: 在此输入图像描述 非常感谢您提供的帮助!

如果您提供数据集,最好使用dput(modCosts)dput(surgCosts),那么这将变得容易得多。 - jlhoward
2
geom_vline(...) 有一个 show_guide=... 参数,默认为 FALSE - jlhoward
1
我建议将所有这些图层折叠成一个单独的geom_vline,使用单个数据框和映射颜色美学。 - joran
1个回答

6

geom_vline(...)(以及_hline_abline)有一个show_guide=...参数,默认为FALSE。显然,大多数情况下您不希望线条颜色显示在图例中。这是一个例子。

df <- mtcars
library(ggplot2)
ggp <- ggplot(df, aes(x=wt, y=mpg, fill=factor(cyl))) +
  geom_point(shape=21, size=5)+
  geom_vline(data=data.frame(x=3),aes(xintercept=x, color="red"), show_guide=TRUE)+
  geom_vline(data=data.frame(x=4),aes(xintercept=x, color="green"), show_guide=TRUE)+
  geom_vline(data=data.frame(x=5),aes(xintercept=x, color="blue"), show_guide=TRUE)

ggp +scale_color_manual("Line.Color", values=c(red="red",green="green",blue="blue"),
                     labels=paste0("Int",1:3))

顺便提一下,如果你坚持使用颜色名称来指定比例尺的话,最好的方法是这样:

ggp +scale_color_identity("Line.Color", labels=paste0("Int",1:3), guide="legend")

这将产生与上述完全相同的图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接