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

Posted

技术标签:

【中文标题】如何在ggplot2中移动或定位图例【英文标题】:How to move or position a legend in ggplot2 【发布时间】:2011-02-26 14:17:13 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

在 > 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 for theme_update(),见ggplot2.tidyverse.org/reference/theme.html“使用theme()修改单个情节的主题;如果你想修改活动主题,见theme_update(),以影响所有后续情节。” 【参考方案2】:

正如 Hadley 所说,您可以使用 theme(legend.position = "bottom") 将图例移至底部

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

opts() 现在已弃用 - 请改用 guide_legend()。 docs.ggplot2.org/0.9.2.1/guide_legend.html 你可以在theme参数中调用legend.direction = "horizontal"【参考方案4】:

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

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

查看Cookbook for R - Legends 了解更多关于善良的传说。

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

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

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

【讨论】:

with theme(legend.position="bottom") 我的图例出现在左下角,而在你的例子中它显示在中间(因为我认为它是多年来我以前的情节)。你知道这件事是否发生了变化,以及如何让它重新回到中间?

以上是关于如何在ggplot2中移动或定位图例的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2中的图例标题位置

R语言ggplot2可视化:ggplot2可视化将图像的图例(legend)移动到图像内部自定义图例所处的位置

R语言ggplot2可视化将图例移动到分面图(facet)中的空白分面区域实战

ggplot2图例到底部和水平

如何使用ggplot2编辑图例的位置

用ggplot2添加图例[重复]