在 facet 的第一个图中定位图例

36
我想把图例放在绘图中,放在一个面板的第一个绘图内。
这是一些示例代码:
df=data.frame(
 x=runif(10),
 y=runif(10),
 facet=rep(c("a","b"),5),
 color=rep(c("red","blue"),5))

ggplot(data=df,aes(x=x,y=y,color=color))+
 geom_point()+
 facet_wrap(~facet,ncol=1)

这是生成的图:

图例在外部的图

以下是我大致想要的样子:

图例在内部的图

感谢您所提供的任何帮助!

2个回答

33

假设您的绘图已保存为p

p + theme(
  legend.position = c(0.9, 0.6), # c(0,0) bottom left, c(1,1) top-right.
  legend.background = element_rect(fill = "white", colour = NA)
)

如果您想让图例背景部分透明,请将 fill 更改为例如 "#ffffffaa"


谢谢Richie!这在我的示例图上起作用了,但是出现问题的是,当我将这些代码行添加到另一个图中时,图例消失了。你有什么想法吗?我已经在原始帖子中放置了opts代码。 - jslefche
另一个图表是否保存为不支持透明度的文件类型(例如gif)? - Richie Cotton
或者您更改了 legend.position 以使其移动到绘图边缘之外了吗? - Richie Cotton
它被移出了图表...legend.position中的值与x轴上的值不一致,原因不明。我似乎现在明白了。 - jslefche
2
图例位置使用的值是相对于绘图区域的,所以 c(0,0) 是您绘图的左下角,c(1,1) 是右上角。它们不能与 x 轴上的值相同,因为不同的面板可以具有不同的比例尺。 - Richie Cotton

21

或者,基于 @Richie Cotton 的回答,鉴于ggplot2现在已经弃用了opts选项(仍然假设您的图是定义为p)

p + theme(legend.position = c(0.9, 0.6)
          ,legend.background = element_rect(fill = "white", colour = NA))

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