我正在尝试使用 addTraces
方法向现有的 plotly plot 添加一条垂直线。我想了解为什么新的垂直线会添加到第一条迹线所在位置的右侧两个单位。
解决此问题可能会解决我原来的问题(问题标题),即在添加新轨迹时避免绘图调整大小/向右移动。
这是我正在尝试做的一个例子:
library(shiny)
library(plotly)
ui <- bootstrapPage(
plotlyOutput("plot")
)
myvec <- rnorm(100)
server <- function(input, output, session) {
values <- reactiveValues(idx=1)
output$plot <- renderPlotly({
plot_ly(type='scatter', mode='lines') %>%
add_trace(y=myvec[1])
})
plotproxy <- plotlyProxy("plot", session)
observe({
plotproxy %>%
plotlyProxyInvoke("extendTraces",
list(y=list(list(myvec[values$idx]))),
list(1))
if(!values$idx%%10) {
plotproxy %>% plotlyProxyInvoke("addTraces",
list(x=c(values$idx, values$idx), # + 2 would "fix it"
y=c(0,myvec[values$idx]),
type="line", showlegend=F))
}
})
observe({
invalidateLater(1000)
isolate({
values$idx <- min(values$idx + 1, length(myvec))
})
})
}
shinyApp(ui = ui, server = server)
简而言之,我希望仅使用 extendTraces
更新 x 轴限制,我只是猜测 2 个单位不匹配是问题所在。
最佳答案
我已经设法解决了 x 轴不匹配的问题,但这并没有解决自动调整大小的问题。问题是我没有使用相同的类型和模式。现在可以了:
library(shiny)
library(plotly)
ui <- bootstrapPage(
plotlyOutput("plot")
)
myvec <- rnorm(100)
server <- function(input, output, session) {
values <- reactiveValues(idx=1)
output$plot <- renderPlotly({
plot_ly(type='scatter', mode='lines') %>% # Must match with vertical line
add_trace(x=c(-1,0), y=myvec[1]) # use x values
})
plotproxy <- plotlyProxy("plot", session)
observe({
plotproxy %>%
plotlyProxyInvoke("extendTraces",
list(x=list(list(values$idx)), # match x values
y=list(list(myvec[values$idx]))),
list(1))
if(!values$idx%%10) {
plotproxy %>% plotlyProxyInvoke("addTraces",
list(x=c(values$idx, values$idx), # x limits match
y=c(0,myvec[values$idx]),
type='scatter', mode='lines', showlegend=F)) # must match
}
})
observe({
invalidateLater(1000)
isolate({
values$idx <- min(values$idx + 1, length(myvec))
})
})
}
shinyApp(ui = ui, server = server)
关于r - 使用 plotlyProxyInvoke 在不调整绘图大小的情况下向绘图添加垂直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58457439/