繁体   English   中英

ggplot2中同一图例中的不同图例键

[英]Different legend-keys inside same legend in ggplot2

假设我不需要“适当的”变量映射,但仍希望使用图例键来帮助理解图表。 我的实际数据类似于以下df

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

library(ggplot2)

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, colour = "points"))

在此处输入图片说明

基本上,我希望相对于points的图例键是......只是一个点,中间没有线。 我接近了这个:

library(reshape2)

df <- melt(df, id.vars="id")

ggplot() +
  geom_point(aes(id, value, shape = variable), df[df$variable=="points",]) +
  geom_line(aes(id, value, colour = variable), df[df$variable=="line",])

但它定义了两个单独的图例。 修复第二个代码(并且必须重塑我的数据)也可以,但我更喜欢一种方法(如果有的话)来手动更改任何图例键(并继续使用第一个方法)。 谢谢!

编辑 :

谢谢@alexwhan,你刷新了我对变量映射的记忆。 但是,到目前为止,我最简单的方法仍然是以下(非常糟糕的黑客!):

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, shape = "points")) +
  theme(legend.title=element_blank())

这只是隐藏了两个不同传说的标题。

在此处输入图片说明

其他想法更受欢迎!!!

您可以在guides()函数中使用override.aes=来更改图例的默认外观。 在这种情况下,您的指南是color= ,然后您应该设置shape=c(NA,16)以删除线的形状,然后linetype=c(1,0)从点删除线。

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, colour = "points"))+
  guides(color=guide_legend(override.aes=list(shape=c(NA,16),linetype=c(1,0))))

在此处输入图片说明

我不知道有什么方法可以轻松做到这一点,但你可以做一个这样的黑客版本(使用你融化的数据框):

p <- ggplot(df.m, aes(id, value)) +
  geom_line(aes(colour = variable, linetype = variable)) + scale_linetype_manual(values = c(1,0)) +
  geom_point(aes(colour = variable, alpha = variable)) + scale_alpha_manual(values = c(0,1))

在此处输入图片说明

关键是您需要获得正确的映射才能使其在图例中正确显示。 在这种情况下,让它“正确”,意味着愚弄它看起来像你想要的样子。 可能值得指出这仅适用,因为您可以将linetype设置为空白 (0),然后对点使用alpha比例。 您不能对两者都使用alpha ,因为它只需要一个比例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM