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


74

我正在尝试创建一个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")

我究竟做错了什么?重新定位图例必须非常常见,所以我想是我。

Answers:


74

在版本> 0.9.3中(opts不建议使用时)

theme(legend.position = "bottom")

旧版本:

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

更新:

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


这不是现在完成theme_update(legend.position = "bottom")吗?
瑞维埃拉

@RuiVieira theme_update(),请参见ggplot2.tidyverse.org/reference/theme.html “使用theme()修改单个地块的主题;如果要修改活动主题以影响所有后续地块,请参见theme_update()。”
joelostblom

8

我在这里时,仅对这些答案进行了一些更新。正如哈德利(Hadley)所述,您可以通过以下方式将图例移至底部theme(legend.position = "bottom")

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

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


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"))

9
opts()现在已弃用-guide_legend()改为使用。docs.ggplot2.org/0.9.2.1/guide_legend.html
安德鲁

你可以调用legend.direction = "horizontal"theme参数。
遗弃'18年

2

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

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

在此处输入图片说明

有关更多图例的优点,请参见R-图例的食谱

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

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

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


在主题为(legend.position =“ bottom”)的情况下,我的图例显示在左下方,而在您的示例中该图例显示在中间(因为我认为这是多年以来我以前的阴谋)。您知道这件事是否有所改变,以及如何再次将其置于中间?
Tingolfin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.