【问题标题】:Different legend-keys inside same legend in ggplot2ggplot2中同一图例中的不同图例键
【发布时间】:2013-04-25 01:10:16
【问题描述】:

假设我不需要“正确”的变量映射,但仍希望有图例键来帮助理解图表。我的实际数据类似于下面的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,您刷新了我对变量映射的记忆。但是,到目前为止,我最简单的方法仍然是以下(非常糟糕的 hack!):

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())

这只是隐藏了两个不同图例的标题。

欢迎其他想法!!!

【问题讨论】:

    标签: r ggplot2 legend-properties


    【解决方案1】:

    您可以在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))))
    

    【讨论】:

    • 非常好的方法。可能是最好的一个。我只是想等别人,但似乎这也是唯一的一个:-)。无论如何,非常感谢!
    【解决方案2】:

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

    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,因为它只需要一个比例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 2013-05-06
      • 2019-11-17
      • 1970-01-01
      相关资源
      最近更新 更多