在R中:在水平上列出图例项目并在图表下方居中

时间:2016-09-23 19:37:50

标签: r legend 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

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

Ideal

是否有可能获得这一点 - 也就是说,一个图例位于图的中心和下方(不会改变窗口大小的位置),同时水平列出其项目?

1 个答案:

答案 0 :(得分:12)

根据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轴的中间。结果如下图所示:

enter image description here