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

我正在试图创build一个ggplot2阴谋与图下的传说。

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

下面的代码可以工作(因为“right”是默认的),它也可以作为图例位置使用“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") 

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

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

 theme(legend.position = "bottom") 

旧版本:

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

更新:

涉及opts(legend.position = "left")的bug已经使用最新版本的ggplot2修复了 。 另外,0.9.0版本引入了guide_legendguide_colorbar ,可以更好地控制图例本身的外观和定位。 例如,能力指定图例项目的行数和列数。

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

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

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

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

在这里输入图像说明

请参阅食谱R – 传奇更多的传说善良。

作为回应, theme_update()如果在ggplot(如+ theme_update()中间调用,仅在后续时间才会+ theme_update() ,它也会修改活动的主题而不是特定的情节。做这个:

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

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