在阴谋烛台图表中缩放Y-Achsis

时间:2017-05-09 18:05:02

标签: r charts scale plotly

我正在寻找一种方法来(自动)缩放烛台图表的y轴。如果您查看以下示例(来自https://plot.ly/r/candlestick-charts/

library(plotly)
library(quantmod)

getSymbols("AAPL",src='yahoo')

df <- data.frame(Date=index(AAPL),coredata(AAPL))
df <- tail(df, 365)

p <- df %>%
  plot_ly(x = ~Date, type="candlestick",
          open = ~AAPL.Open, close = ~AAPL.Close,
          high = ~AAPL.High, low = ~AAPL.Low) %>%
  add_lines(y = ~AAPL.Open, line = list(color = 'black', width = 0.75)) %>%
  layout(showlegend = FALSE)

y轴具有autoscal =“normal”,因此从数据集中获取最小值和最大值,但如果缩放,则这些值保持不变。我可以更清楚地获得图表当前(缩放/查看)部分的最小值和最大值 not zoomend

zoomed in

到目前为止,我找不到实现此功能的方法,有没有人知道这样做的方法?

对我来说,另一个解决方案就是从这个例子中的图表中获得“正常”缩放:

library(plotly)
set.seed(100)
d <- diamonds[sample(nrow(diamonds), 1000), ]
plot_ly(d, x = ~carat, y = ~price, color = ~carat,
        size = ~carat, text = ~paste("Clarity: ", clarity))

1 个答案:

答案 0 :(得分:0)

在烛台图表内移动滑块也不会自动调整 y 轴。 Plotly 团队可能还没有解决烛台图表的问题。 autorange = TRUE 两者都不起作用。

但是,如果有人在闪亮的应用程序中使用它,那么可行的解决方法是让日期滑块与 Plotly 图形反应连接。步骤如下:

  1. 创建一个选择了开始和结束的日期滑块

ui.R

...
uiOutput("dateSlider")
...

server.R

  output$dateSlider <- renderUI({
     sliderInput(
      "dtSlider",
      "Select a date range:",
      min = min_date,  
      max = max_date,
      value = c(max_date - 30, max_date),  # in this case last 30 defines start and end
      timeFormat = "%Y-%m-%d",
      width = '80%'
    )
  output$dateSlider <- renderUI({
  1. 在 server.R 的 RenderPlotly 部分中,使用 input$dtSlider[1]input$dtSlider[2] 从头到尾过滤数据,计算一个 data.frame,然后在 Plotly 代码中使用新的反应过滤的 data.frame .

ui.R

plotlyOutput("candleChart")

server.R

output$candleChart <- renderPlotly({
...
df <- as.data.frame(dbFetch(res)) # querying DB to pull data with new input$dtSlider[1] as start and input$dtSlider[2] as end
...
fig <- df %>% plot_ly(x = ~timestamp, type="candlestick",
                          open = ~open, close = ~close,
                          high = ~high, low = ~low )

...

})

所以现在如果我们更改日期滑块,y 轴范围会自动更改,如下所示来自同一个 data.frame 对象: enter image description here enter image description here