在ggplot2多层图中添加外部/自定义图例

时间:2014-07-30 02:56:27

标签: r ggplot2

我正在尝试向ggplot添加自定义图例。我正在使用(http://www.nicebread.de/visually-weighted-watercolor-plots-new-variants-please-vote/)的水彩图。 vwReg的代码存在于网站中。

我正在绘制2个不同的数据

 mtcars$rand2 = rnorm(nrow(mtcars))
 mtcars$rand1 = rnorm(nrow(mtcars))
 pp1 = vwReg(rand1~wt, data=mtcars, spag=T, add=T, shade=F, spag.color="green")
 pp2 = vwReg(rand2~wt, data=mtcars, spag=T, add=T, shade=F, spag.color="red")
 ggplot2() + pp1 + pp2

但是,它没有为rand1和rand2提供任何图例。我试图在geom_path中添加一个颜色,以创建spag(spagetti)图。然而,情节太薄而且不可见。我想知道是否有办法将自定义图例添加为单独的图层并告诉它有2种颜色的红色和绿色。
 enter image description here

我也可以从https://dl.dropboxusercontent.com/u/2706915/vwRegs.R

下载vwReg的代码

2 个答案:

答案 0 :(得分:2)

您也可以通过更改vwReg功能来完成此操作。现在,color被设置为spag.color未映射。如果更改vwReg函数的这一行:

gg.spag <-  geom_path(data=b2, aes(x=x, y=value, group=B), size=0.7, alpha=10/B, color=spag.color)

对于这样的事情:

gg.spag <-  geom_path(data=b2, aes_q(x=quote(x), y=quote(value), group=quote(B), color=spag.color), size=0.7, alpha=10/B)

你将能够在你的情节上得到传说(this answer给出了一个以这种方式映射颜色的例子)。

你需要做一些工作才能使传奇看起来正确。首先,您必须更改legend.position中的theme(现在legend.position设置为&#34;无&#34;)。一旦你允许传说,你就会发现alpha有一个连续的传奇,你可能想要移除它。您可以使用scale_color_manual编辑颜色图例。

如上所述编辑vwReg功能之后,这里有一种方法可以使用图例为每个组制作一个颜色的图形。

ggplot() + 
    pp1 + pp2 + 
    theme(legend.position = "right") +
    scale_color_manual(name = "Number of Cylinders", values = c("green" = "green", "red" = "red"), 
                    labels = c("group1", "group2"), 
                    guide = guide_legend(override.aes = list(alpha = 1))) +
    scale_alpha_continuous(guide = FALSE)

答案 1 :(得分:0)

我发现了一种丑陋(并且完全不优雅)的方法。它结合了ggplot2和传奇与

 library(gridBase)
 plot.new()
 grid.newpage()
 pushViewport(viewport(layout = grid.layout(1, 1)))
 #Draw ggplot
 pushViewport(viewport(layout.pos.col = 1))
 print(ggplot2() + pp1 + pp2, newpage = FALSE)
 legend("topright", inset=.05, title="Number of Cylinders",
    c("rand1", "rand2"), fill=c("blue", "black") , horiz=TRUE)
 popViewport()