Shiny绘图无法导出为PNG问题求助
Shiny下载按钮生成HTML而非PNG的问题解决
你的代码存在几个关键错误,导致下载功能异常,以下是问题分析和修正方案:
错误点说明
downloadHandler参数格式错误:downloadHandler的filename和content是参数,需要用=传递,而非<-赋值。原写法会导致Shiny无法正确识别下载逻辑,返回默认的HTML页面。- 绘图函数名称不匹配:
content中调用了不存在的plotInput(),实际你定义的绘图函数是preview(),名称不匹配导致无法生成图像。 - 图形设备未正确关闭:
dev.off缺少括号,应为dev.off(),不执行此函数会导致PNG文件无法完成写入,最终生成无效文件。 - 输入控件拼写错误(建议修正):
sliderInput的lenght是拼写错误,正确应为length,避免后续逻辑出现意外问题。
修正后的完整代码
library(shiny) library(shinycssloaders) library(ambient) ui <- fluidPage( sliderInput("min","Grid Minimum",min = 5, max = 15,value = 10), sliderInput("max","Grid Maximum",min = 5, max = 15,value = 10), sliderInput("length","Grid Breaks",min = 100, max = 1000, step = 100, value = 500), plotOutput("worleyplot"), downloadButton("dl","Download Pic") ) server <- function(input,output){ preview <- function(){ grid <- long_grid(seq(input$min,input$max,length.out = input$length), seq(input$min,input$max,length.out = input$length)) grid$noise <- gen_worley(grid$x,grid$y,value = 'distance') plot(grid,noise) } output$worleyplot <- renderPlot(preview()) output$dl <- downloadHandler( filename = "plot.png", content = function(file){ png(file) preview() dev.off() } ) } shinyApp(ui, server)
内容的提问来源于stack exchange,提问作者Ahmad Noman Alnoor
相关产品推荐
相关产品推荐

