如何在ggplot2中移动或定位图例

Dan*_*ein 63 r legend ggplot2 legend-properties

我正在尝试使用图表下方的图例创建一个ggplot2图.

ggplot2书在第112页上说"传说的位置和对齐由主题设置legend.position控制,值可以是右,左,上,下,无(无图例)或数字位置".

下面的代码工作(因为它是默认的"右"),并且它也可以使用"none"作为图例位置,但是"left","top","bottom"都会失败并显示"grid in Grid.Call" .graphics("L_setviewport",pvp,TRUE):视口的非有限位置和/或大小"

library(ggplot2)
(myDat <- data.frame(cbind(VarX=10:1, VarY=runif(10)), 
    Descrip=sample(LETTERS[1:3], 10, replace=TRUE)))
qplot(VarX,VarY, data=myDat, shape=Descrip) + 
    opts(legend.position="right")
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?重新定位一个传奇必须非常普遍,所以我认为这是我.

had*_*ley 60

在版本> 0.9.3(opts不推荐使用时)

theme(legend.position = "bottom")
Run Code Online (Sandbox Code Playgroud)

旧版本:

不幸的是,这是ggplot2中的一个错误,我真的希望在今年夏天修复它.

更新:

涉及的bug opts(legend.position = "left")已使用最新版本的ggplot2修复.此外,版本0.9.0看到了引入,guide_legendguide_colorbar允许更精细地控制图例内的项目的外观和位置.例如,该功能指定图例项的行数和列数.


Soi*_*Guy 12

当我在这里时,只是对这些答案进行了一些更新。正如哈德利所提到的,您可以将图例移动到底部theme(legend.position = "bottom")

或手动移动 theme(legend.position = c(.2,.85))

如果您希望图例是水平的,请使用 theme(legend.position = c(.2,.85), legend.direction = "horizontal")


C8H*_*4O2 9

在较新版本中ggplot2,您可以使用+ theme(legend.position='bottom').

qplot(VarX,VarY, data=myDat, shape=Descrip) + 
  theme(legend.position='bottom')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请参阅Cookbook for R - Legends了解更多传奇的优点。

作为对评论的回应,theme_update()如果在 ggplot 中间调用,则不会启动(如 中所示+ theme_update(),仅在随后的时间中调用。它还会修改活动主题而不仅仅是特定的图。所以你可以这样做:

theme_update(legend.position='bottom')
qplot(VarX,VarY, data=myDat, shape=Descrip) 
Run Code Online (Sandbox Code Playgroud)

结果如上,不同之处在于后续图也将默认为底部图例。


And*_*eas 5

您始终可以手动放置图例 - 但由于标签仍然堆叠/垂直,它看起来有点难看。我真的希望哈德利能抽出时间来解决这个问题:-)

p <- qplot(VarX,VarY, data=myDat, shape=Descrip) + 
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines"))
Run Code Online (Sandbox Code Playgroud)

  • `opts()` 现已弃用 - 使用 `guide_legend()` 代替。http://docs.ggplot2.org/0.9.2.1/guide_legend.html (9认同)