【问题标题】:How to create a legend from scratch which is not in aes of ggplot2?如何从头开始创建不在 ggplot2 的 aes 中的图例?
【发布时间】:2014-01-22 09:43:08
【问题描述】:

在这里继续我的问题:Variable line size using ggplot2

我可以用这些代码创建一个图形。

x <- 1:100
y <- x * x 
z <- abs(cos(x * pi / (max(x))))

df <- data.frame(x = x, y = y, z = z)
library(ggplot2)


mult <- 200
ggplot(df, aes(x, y)) + geom_line() + geom_ribbon(aes(ymin=y-mult*z, ymax=y+mult*z))

但我现在的问题是如何创建一个图例来反映线条的大小。比如本图中的图例

    ggplot(df, aes(x, y, size = z)) + geom_line()

有没有什么方法可以从零开始写一个 aes 中不存在的图例?

感谢您的任何建议。

【问题讨论】:

  • 这是在aes():stackoverflow.com/questions/16389636/…之外添加额外图例的好指南
  • 感谢您的 cmets。这对我来说是非常有帮助的。我刚刚创建了一个不可见的图层来创建图例。

标签: r ggplot2


【解决方案1】:

您可以将第二个情节的图例添加到第一个情节。

p1 <- ggplot(df, aes(x, y)) + geom_line() + geom_ribbon(aes(ymin=y-mult*z, ymax=y+mult*z))

p2 <- ggplot(df, aes(x, y, size = z)) + geom_line()

g_legend <- function(a.gplot){
  tmp <- ggplot_gtable(ggplot_build(a.gplot))
  leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
  legend <- tmp$grobs[[leg]]
  return(legend)
}
legend <- g_legend(p2)
library(gridExtra)
pp <- arrangeGrob(p1 ,legend,
                  widths=c(5/4, 1/4),
                   ncol = 2)

【讨论】:

  • 感谢您的 cmets。这是我的问题的另一个解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 2021-04-12
  • 2021-11-18
相关资源
最近更新 更多