84

我正在尝试创建一个带有图例下方的 ggplot2 图。

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

以下代码有效(因为“right”是默认值),它也可以使用“none”作为图例位置,但是“left”、“top”、“bottom”都失败,并出现“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

4 回答 4

92

在 > 0.9.3 版本中(何时opts被弃用)

theme(legend.position = "bottom")

旧版本:

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

更新:

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

于 2010-06-02T02:22:02.377 回答
17

正如 Hadley 提到的,您可以使用以下命令将图例移至底部theme(legend.position = "bottom")

或使用手动定位theme(legend.position = c(.2,.85))

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

于 2018-08-17T19:23:29.550 回答
4

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

p <- qplot(VarX,VarY, data=myDat, shape=Descrip) + 
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines"))
于 2010-06-03T11:56:45.570 回答
3

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

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

在此处输入图像描述

有关更多传奇的信息,请参阅R - Legends 的食谱

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

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

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

于 2017-08-22T15:46:39.783 回答