web-dev-qa-db-ja.com

plotlyの水平/垂直線

plotlyパッケージを使用しており、グラフに水平線を追加しようとしています。 plotlyを使用してそれを行う方法はありますか?

以下に示すように、ggplot2およびggplotly関数を使用して実行できます。

library(plotly)

p <- ggplot() +
  geom_hline(yintercept = 4) +
  xlim(c(0,10)) +
  ylim(c(0,10))

ggplotly(p)

ただし、これを既存のプロットプロットに追加することはできません。

また、グラフの軸は固定されていないため、水平線のx座標とy座標を単純に計算することは困難ですが(不可能ではありません)、自動的に追加するだけです。

Y0とdyの引数を調べましたが、それらが機能するコードを取得することもできないようです。彼らが何をしているのか正確にはわかりませんが、おそらく私が探しているものだと思いますか?それらの使用法の良い例を見つけることができません。

18
Sam Helmich

これを行う主な方法があります(データまたは「紙」座標のいずれかを使用)。データ座標を仮定すると、現在の最も簡単な方法はadd_segments()を介したものです:

plot_ly() %>%
  add_segments(x = 4, xend = 4, y = 0, yend = 10) %>%
  add_segments(x = 3, xend = 5, y = 5, yend = 5)

enter image description here

これらの線の範囲をデータ座標でハードコーディングしたことに注目してください。そのため、プロットをズームおよびパンすると、線はそれらの値で「クリップ」されます。これらの線をクリップしたくない場合は、xref/yrefを紙に設定して line shape を使用します(これにより、グラフ領域がx/yではなく0-1スケールになりますデータスケール):

vline <- function(x = 0, color = "red") {
  list(
    type = "line", 
    y0 = 0, 
    y1 = 1, 
    yref = "paper",
    x0 = x, 
    x1 = x, 
    line = list(color = color)
  )
}

hline <- function(y = 0, color = "blue") {
  list(
    type = "line", 
    x0 = 0, 
    x1 = 1, 
    xref = "paper",
    y0 = y, 
    y1 = y, 
    line = list(color = color)
  )
}

plot_ly() %>%
  layout(shapes = list(vline(4), hline(5)))

enter image description here

26
Carson

または、layout()の下にシェイプ(線)を追加することもできます。次の例は、垂直線を追加します。

p <- plot_ly(data, x = ~x.data, y = ~y.data, text = ~text.data, type = 'scatter', 
       mode = 'markers', marker = list(size = ~size.data, opacity= 0.5)) %>%
     layout(shapes=list(type='line', x0= 0.2, x1= 0.2, y0=min(allyvalues), y1=max(allyvalues), line=list(dash='dot', width=1)),
       title = 'This is the Title',
       xaxis = list(title = "X-Axis", showgrid = TRUE),
       yaxis = list(title = "Y-Axis", showgrid = TRUE))
p
11
user3268362