Shiny Plotly R - 在图形之间切换时,保持缩放
Shiny Plotly R - When Toggling Between Graphs, Maintain Zoom
我有一个闪亮的应用程序,我正在用 plotly 绘制多个 ggplot2 散点图。在散点图之间切换时如何保持缩放固定?
我正在寻找这样的东西,但对于 Shiny Plotly R:https://community.plot.ly/t/preserving-ui-state-like-zoom-in-dcc-graph-with-uirevision/15793
编辑:
我目前正在尝试实施 plotlyProxy(),但到目前为止还没有成功。
这是我目前拥有的(多余的代码已被删除):
server <- function(input, output, session) {
output$trendPlot <- renderPlotly({
# build graph with ggplot syntax
p <- ggplot()
zoom <- event_data("plotly_relayout","source")
observeEvent(lims(), {
plotlyProxy("plot", session) %>%
plotlyProxyInvoke("relayout", list(xaxis.range = list(zoom$`xaxis.range[0]`,zoom$`xaxis.range[1]`),
yaxis.range = list(zoom$`yaxis.range[0]`,zoom$`yaxis.range[1]`)))
})
})
}
但它什么也没做。当我切换到不同的散点图时,图形仍然重置 x 轴和 y 轴...
对于任何感兴趣的人,这就是我解决问题的方法:
server <- function(input, output) {
output$trendPlot <- renderPlotly({
zoom <- event_data("plotly_relayout")
# build graph with ggplot syntax
if(is.null(zoom) || names(zoom[1]) %in% c("xaxis.autorange", "width") ||names(zoom[3])==c("xaxis.showspikes")) {
p <- ggplot()
}
else{
p <- ggplot() +
scale_y_continuous(limits=c(zoom$`yaxis.range[0]`,zoom$`yaxis.range[1]`)) +
scale_x_continuous(limits=c(zoom$`xaxis.range[0]`,zoom$`xaxis.range[1]`))
}
})
}
我有一个闪亮的应用程序,我正在用 plotly 绘制多个 ggplot2 散点图。在散点图之间切换时如何保持缩放固定?
我正在寻找这样的东西,但对于 Shiny Plotly R:https://community.plot.ly/t/preserving-ui-state-like-zoom-in-dcc-graph-with-uirevision/15793
编辑:
我目前正在尝试实施 plotlyProxy(),但到目前为止还没有成功。
这是我目前拥有的(多余的代码已被删除):
server <- function(input, output, session) {
output$trendPlot <- renderPlotly({
# build graph with ggplot syntax
p <- ggplot()
zoom <- event_data("plotly_relayout","source")
observeEvent(lims(), {
plotlyProxy("plot", session) %>%
plotlyProxyInvoke("relayout", list(xaxis.range = list(zoom$`xaxis.range[0]`,zoom$`xaxis.range[1]`),
yaxis.range = list(zoom$`yaxis.range[0]`,zoom$`yaxis.range[1]`)))
})
})
}
但它什么也没做。当我切换到不同的散点图时,图形仍然重置 x 轴和 y 轴...
对于任何感兴趣的人,这就是我解决问题的方法:
server <- function(input, output) {
output$trendPlot <- renderPlotly({
zoom <- event_data("plotly_relayout")
# build graph with ggplot syntax
if(is.null(zoom) || names(zoom[1]) %in% c("xaxis.autorange", "width") ||names(zoom[3])==c("xaxis.showspikes")) {
p <- ggplot()
}
else{
p <- ggplot() +
scale_y_continuous(limits=c(zoom$`yaxis.range[0]`,zoom$`yaxis.range[1]`)) +
scale_x_continuous(limits=c(zoom$`xaxis.range[0]`,zoom$`xaxis.range[1]`))
}
})
}