web-dev-qa-db-ja.com

Rのplotly:凡例項目を水平にプロットの下の中央にリスト

凡例を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

これを取得することは可能ですか?つまり、アイテムを水平方向に一覧表示しているときに、プロットの中央および下に配置された凡例(ウィンドウサイズで場所が変化しない)ですか?

11
user1830307

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

21
Nick To