在绘图下方水平居中显示图例项列表

31

我一直在调整plotly和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))

然而,我注意到这个图例的位置会根据我查看图表的方式(我制作的图表窗口的尺寸等)而改变。因此,图例有时会意外地重叠在图表上(因为位置太高),或者与图表相隔过大的距离(因为位置太低)。以下是一个图例位置过低的示例图像:

Legend moves depending on plot window dimensions

此外,当将图例放置在图形下方时,将图例项水平列出(而不是垂直列出)可能会更好看。在这个例子中,最好将维吉尼亚、变色鸢尾和山鸢尾从左到右列在图例中,而不是从上到下。因此,理想情况下应该是这样的:

Ideal

是否有可能获得这个功能 - 即在图表下方居中放置一个图例(不随窗口大小改变位置),同时水平列出其项目?

1个回答

69
根据文档,以下代码应该可以解决问题:
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轴的中间。这导致生成以下图表:

enter image description here


谢谢!在某些缩放级别下,x轴标签和图例之间有一些重叠:您有什么管理它们之间空间的想法吗? - yeahman269
7
y=-0.2添加到legend=list()中可将图例放置在x轴标签下方。调整该值以达到所需的适配效果。 - TTS
我确认@TTS。将“y”设置为负值,如“-0.2”或“-0.3”,就可以解决问题。谢谢。 - Stéphane Laurent
2
能否在标题下方垂直对齐它(而无需猜测y值)? - ccamara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接