gpt4 book ai didi

r - 从 Shiny、Plotly - R 中提取所有点击事件图

转载 作者:行者123 更新时间:2023-12-01 16:18:31 29 4
gpt4 key购买 nike

在下面的 shiny 应用中,plotly 包用于创建交互式相关热图。单击各个图 block 时,会出现相应的散点图。然后,可以通过单击下载 png 格式来下载各个散点图。但是有没有一种方法可以一次性下载所有可能的散点图,而不必单击每个单独的图 block 并保存每个单独的图 block ?谢谢

library(plotly)
library(shiny)

# compute a correlation matrix
correlation <- round(cor(mtcars), 3)
nms <- names(mtcars)

ui <- fluidPage(
mainPanel(
plotlyOutput("heat"),
plotlyOutput("scatterplot")
),
verbatimTextOutput("selection")
)

server <- function(input, output, session) {
output$heat <- renderPlotly({
plot_ly(x = nms, y = nms, z = correlation,
key = correlation, type = "heatmap", source = "heatplot") %>%
layout(xaxis = list(title = ""),
yaxis = list(title = ""))
})

output$selection <- renderPrint({
s <- event_data("plotly_click")
if (length(s) == 0) {
"Click on a cell in the heatmap to display a scatterplot"
} else {
cat("You selected: \n\n")
as.list(s)
}
})

output$scatterplot <- renderPlotly({
s <- event_data("plotly_click", source = "heatplot")
if (length(s)) {
vars <- c(s[["x"]], s[["y"]])
d <- setNames(mtcars[vars], c("x", "y"))
yhat <- fitted(lm(y ~ x, data = d))
plot_ly(d, x = ~x) %>%
add_markers(y = ~y) %>%
add_lines(y = ~yhat) %>%
layout(xaxis = list(title = s[["x"]]),
yaxis = list(title = s[["y"]]),
showlegend = FALSE)
} else {
plotly_empty()
}
})

}

shinyApp(ui, server)

最佳答案

您可以按照此处的说明使用 webshot 捕获 Plotly HTML 输出的静态图像:https://plot.ly/r/static-image-export/

下面的 for 循环示例从 mtcars 生成随机散点图。

library(plotly)
library(webshot)

## You'll need to run the function the first time if you dont't have phantomjs installed
#webshot::install_phantomjs()
ColumnOptions <- colnames(mtcars)

for (i in seq_len(5)){
xCol <- sample(ColumnOptions,1)
yCol <- sample(ColumnOptions,1)
ThisFileName <- paste0("Scatter_",xCol,"_vs_",yCol,".png")

plot_ly(x = mtcars[[xCol]], y = mtcars[[yCol]], type = "scatter", mode = "markers") %>%
export(., file = ThisFileName)
}

但是,如果您可能要执行此操作数十次,则执行以下步骤所需的计算量确实会增加。

  1. R 生成 JSON plotly 对象
  2. 使用htmlwidgets/htmltools生成独立的HTML网页
  3. 将该 HTML 渲染为浏览器可以通过外部程序看到它 --webshot
  4. 使用 webshot 渲染该 HTML 的图像并将其另存为 PNG

这并不是 plotly 缓慢的反射(reflect),但打个比方,这有点像使用飞机旅行半英里 - 飞机可以带你到达那里,但是如果您需要进行多次这样的旅行,您可能应该考虑一辆车。

上面的 plotly 循环需要 27 秒来渲染 5 个 PNG 图像,但下面使用 ggplot2 的替代方法需要 1.2 秒。

library(ggplot2)

ColumnOptions <- colnames(mtcars)

for (i in seq_len(5)){
xCol <- sample(ColumnOptions,1)
yCol <- sample(ColumnOptions,1)
ThisFileName <- paste0("ggplot2_Scatter_",xCol,"_vs_",yCol,".png")

ggplot() +
geom_point(aes(x = mtcars[[xCol]], y = mtcars[[yCol]])) +
labs(x = xCol, y = yCol) -> ThisPlot

ggsave(plot = ThisPlot, filename = ThisFileName)
}

关于r - 从 Shiny、Plotly - R 中提取所有点击事件图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50283755/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com