web-dev-qa-db-ja.com

Rでplotlyを使用して棒グラフで長いx軸の目盛りラベルが切り取られないようにする

plotlyを使用して、x軸ラベルとして長い文字列を含む棒グラフをプロットしようとしています。ただし、これらの文字列は、次のようにplotlyで区切られています。

Plotly chart axis

plotly軸の属性のリストを調べて、tickangle(これは意味がありません、私は今気づきました)などの設定を試みましたが、すべてが役に立たない。

10
kevw22

layout関数で、プロットレイアウトのマージンを調整できます。

提供されていないため再現可能な例:

d <- data.frame(traitMean = apply(iris[-5], 2, mean))
# long labels
labs <- c("Long name for this", "Long name for that",
          "Long names everywhere", "Petal Width")

これをデフォルトのマージンでプロットすると、ラベルはカットオフされます。

# example where ticklabels are cutoff
plot_ly(y = d[["traitMean"]], x = labs, type = "bar") %>% 
    layout(xaxis = list(tickangle = 45))

marginlayout引数で、デフォルトの下マージンを調整できます。 marginは名前付きリストを受け取ります。ここで、bは「下」マージンの名前です。この例では160 pxが機能しますが、ラベルに適した値を見つける必要がある場合があります。

plot_ly(y = d[["traitMean"]], x = labs, type = "bar") %>% 
    layout(margin = list(b = 160), xaxis = list(tickangle = 45))

enter image description here

21
Jota

textposition="outside"の場合、テキストがバーで途切れることがあります。これを回避するには、マージンを設定してy軸ラベルの切り捨てを修正するとともに、cliponaxis = FALSEを設定して値ラベルの切り捨てを修正します。

以下は、上と下のマージンを追加してy軸ラベルの切り捨てを削除しているにもかかわらず、値ラベルの切り捨ての例です。

library(plotly)

plot_ly(
x = c("1. Group 1", "2. Txn","3. AOV","4. Account/Recv CV","5. Cost %","6. Lost %","7. Take Rate","8. Group 2"),
  y = c(3.8,0,0,0,0,0,0,3.8),
  name = "SF Zoo",
  type = "waterfall",
  measure = c("relative", "relative", "relative", "relative", "relative", "relative", "relative","total"),
  text = c(3.8,0,0,0,0,0,0,3.8), textposition = 'outside'
) %>% 
layout(margin = list(b = 20,t=20))

結果のグラフの値は3.8カットオフです。 Value Labels Truncated

cliponaxis = FALSEを追加すると、カットオフが削除されます

plot_ly(
  x = c("1. Group 1", 
        "2. Txn",
        "3. AOV",
        "4. Account/Recv CV",
        "5. Cost %",
        "6. Lost %", 
        "7. Take Rate",
        "8. Group 2"),
  y = c(3.8,0,0,0,0,0,0,3.8),
  name = "SF Zoo",
  type = "waterfall",
  measure = c("relative", "relative", "relative", "relative", "relative", "relative", "relative","total"),
  text = c(3.8,0,0,0,0,0,0,3.8), textposition = 'outside', cliponaxis = FALSE
) %>% 
layout(margin = list(b = 20,t=20))

Truncation removed after adding cliponaxis = FALSE

お役に立てれば

0
Abhishek R