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

时间:2010-06-01 23:15:13

标签: r ggplot2 legend legend-properties

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

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

以下代码有效(因为“正确”是默认设置),并且它也可以使用“none”作为图例位置,但是“left”,“top”,“bottom”都会失败并显示“Error 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")

我做错了什么?重新定位一个传奇必须非常普遍,所以我认为它就是我。

4 个答案:

答案 0 :(得分:56)

在版本&gt; 0.9.3(弃用opts时)

theme(legend.position = "bottom")

旧版本:

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

更新

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

答案 1 :(得分:4)

在这里时,只需对这些答案进行一些更新即可。 如Hadley所述,您可以使用theme(legend.position = "bottom")

将图例移至底部

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

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

答案 2 :(得分:3)

您可以随时手动放置图例 - 但由于标签仍然是堆叠/垂直的,因此看起来很丑陋。我真的希望hadley有时间解决这个问题: - )

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

答案 3 :(得分:2)

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

qplot(VarX,VarY, data=myDat, shape=Descrip) + 
  theme(legend.position='bottom')

enter image description here

有关更多传说的好处,请参阅Cookbook for R - Legends

在回复评论时,如果在ggplot中间调用theme_update(),则+ theme_update()不会启动(如theme_update(legend.position='bottom') qplot(VarX,VarY, data=myDat, shape=Descrip) 中所述,仅在后续时间。它还会修改活动主题而不仅仅是特定情节。所以你可以这样做:

  <p>Filter by gender</p>
  <select class="filter-users">
     <option value="female">Female</option>
     <option value="male">Male</option>
   </select>
   <p>Filter by city</p>
      <input class="filter-users" type="text" name="city">

与上述结果相同,不同之处在于后续图表也将默认为底部的图例。