在 R 中绘图:水平列出图例项并在绘图下方居中

Posted

技术标签:

【中文标题】在 R 中绘图:水平列出图例项并在绘图下方居中【英文标题】:plotly in R: Listing legend items horizontally and centered below a plot 【发布时间】:2017-02-01 18:18:10 【问题描述】:

我一直在调整图例和 R 中的图例。我无法弄清楚的一件事是如何(如果可能的话)重新定位图例项,以便它们水平列出并居中位于图下方。默认的图例项是垂直放置的,位于绘图的右侧,如下所示:

plot_ly(data = iris, x = Sepal.Length, y = Petal.Length, mode = "markers", color = Species)

我可以通过以下方式获得下面的图例并以情节为中心:

plot_ly(data = iris, x = Sepal.Length, y = Petal.Length, mode = "markers", color = Species) %>% layout(legend = list(x = 0.35, y = -0.5))

但是,我注意到此图例位置会根据我查看绘图的方式(我制作绘图窗口的尺寸等)而变化。正因为如此,图例有时会意外地与情节重叠(通过定位太高)或与情节分开一个笨拙的大距离(通过定位太低)。以下是图例位置过低的示例图片:

此外,将图例放置在图下方时,将图例项目水平(而不是垂直)列出可能会更好。在此示例中,最好在图例中从左到右(而不是从上到下)列出Virginica、versicolor 和 setosa。因此,理想情况下看起来像这样:

是否有可能在水平列出其项目时获得这个 - 即位于绘图中心和下方的图例(不随窗口大小改变位置)?

【问题讨论】:

【参考方案1】:

根据documentation,以下应该可以解决问题:

data(iris)
plot_ly(data = iris, 
        x = ~Sepal.Length, 
        y = ~Petal.Length, 
        mode = "markers", 
        color = ~Species) %>%
layout(legend = list(orientation = "h",   # show entries horizontally
                     xanchor = "center",  # use center of legend as anchor
                     x = 0.5))             # put legend in center of x-axis

它将图例方向设置为“水平”,然后将锚点(我们指定的位置)设置为图例的中心,然后将其定位在 x 轴的中间。结果如下图:

【讨论】:

谢谢! x 轴标签和具有一定缩放级别的图例之间有一点重叠:知道如何管理它们之间的空间吗? y=-0.2 添加到legend=list() 应将图例放在x 轴标签下方。调整值以获得所需的拟合。 我确认@TTS。将y 设置为负值,例如-0.2-0.3 就可以了。谢谢。 是否可以在标题下方垂直对齐(无需猜测y值?)

以上是关于在 R 中绘图:水平列出图例项并在绘图下方居中的主要内容,如果未能解决你的问题,请参考以下文章

r怎么把图例设置在绘图区外

R语言ggplot2可视化自定义图例的位置实战:legend position相对于绘图区域配置自定义图例位置

R中的绘图函数产生图例而不调用legend()

反转图例顺序而不更改绘图快速条形图中的条形顺序

我想让 r 条形图的图例框水平,但 ncol 不起作用

如何在绘图中仅显示特定曲线子集的图例?