首页 文章

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

提问于
浏览
47

我正在尝试使用图表下方的图例创建一个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")

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

4 回答

  • 2

    您可以随时手动放置图例 - 但由于标签仍然是堆叠/垂直的,因此看起来很丑陋 . 我真的希望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"))
    
  • 1

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

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

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

  • 1

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

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

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

    在回复评论时,如果在ggplot中间调用 theme_update() (如在 + theme_update() 中,仅在后续时间 . )它也会启动 . 它还会修改活动主题而不仅仅是特定的情节 . 所以你可以这样做:

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

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

  • 46

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

    theme(legend.position = "bottom")
    

    Older version:

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

    更新:

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

相关问题