Shiny R Markdown Shining renderPlot来自Lappy的绘图列表
我正在开发一个R降价文档,以便:Shiny R Markdown Shining renderPlot来自Lappy的绘图列表,shiny,r-markdown,lapply,openair,Shiny,R Markdown,Lapply,Openair,我正在开发一个R降价文档,以便: 将数据框子集以包括“日期”列和一些数字数据列。按照设置闪亮用户输入的方式,选择要包含的数据列的单选按钮,然后点击“子集数据”按钮创建d()-没问题:) 生成打印列表(plotList),每个数字数据列对应一个打印列表(根据日期列打印)。我正在使用openair软件包timePlot功能生成绘图,并使用lappy生成绘图对象列表(plotList)-没问题:) 使用renderPlot将plotList中的所有绘图输出到R标记文档-问题:( 我知道也有类似的问题(
d()
-没问题:)plotList
),每个数字数据列对应一个打印列表(根据日期列打印)。我正在使用openair
软件包timePlot
功能生成绘图,并使用lappy
生成绘图对象列表(plotList
)-没问题:)renderPlot
将plotList
中的所有绘图输出到R标记文档-问题:(d()
:
尝试2(基于)。不显示任何绘图
```{r plot,echo=FALSE,message=FALSE}
renderPlot({
i<-names(d())[-1]
tp<-function(x){
p<-timePlot(d(),
pollutant=print(x),
main="Minute Validation",
ylab="Minute Conc. (ug/m3 or ppb)",
key=T)
p$plot
}
lapply(i,tp)
})
```
```{r plot,echo=FALSE,message=FALSE}
plotList<-reactive({
i<-names(d())[-1]
tp<-function(x){
p<-timePlot(d(),
pollutant=print(x),
main="Minute Validation",
ylab="Minute Conc. (ug/m3 or ppb)",
key=T)
p$plot
}
lapply(i,tp)
})
observe({
for (j in 1:length(plotList())){
local({
my_j<-j
renderPlot({plotList()[[my_j]]})
})#end local
} #end for loop
}) #end observe
```
`{r plot,echo=FALSE,message=FALSE}
绘图列表[新答案]
我终于解决了这个问题。关键是要完全遵循你文章第三个链接中的例子,首先使用renderUI
```{r plot,echo=FALSE,message=FALSE}
tp_list <- reactive({
i<-names(d())[-1]
tp<-function(x){
p<-timePlot(d(),
pollutant=print(x),
main="Minute Validation",
ylab="Minute Conc. (ug/m3 or ppb)",
key=T)
p$plot
}
lapply(i, tp)
})
renderUI({
plot_output_list <- lapply(1:length(tp_list()), function(i) {
plotname <- paste("plot", i, sep="")
plotOutput(plotname)
})
do.call(tagList, plot_output_list)
})
observe({
for (i in 1:length(tp_list())) {
local({
my_i <- i
plotname <- paste("plot", my_i, sep="")
output[[plotname]] <- renderPlot({
tp_list()[[my_i]]
})
})
}
})
```
`{r plot,echo=FALSE,message=FALSE}
感谢您的尝试。我可以通过在timePlot中使用pollutant=names(d())[-1]
作为参数并删除函数tp
来生成与上面相同的绘图。这对我不起作用的原因是,我需要根据日期(>10)绘制多列数据将它们作为单独的面板放在一个绘图中是不可取的,数据会被压缩。我需要将它们放在单独的绘图中。你可以设置图像高度,根据面板的数量动态调整。用一个完全有效的示例,多个绘图更新了我的答案!是的!!!我不完全理解renderUI的功能,但它可以Works!谢谢你比谢谢你还要感谢你!!!!!基本上renderUI为renderPlot保留了绘制图形的空间。请将答案标记为已接受。
```{r plot,echo=FALSE,message=FALSE}
tp_list <- reactive({
i<-names(d())[-1]
tp<-function(x){
p<-timePlot(d(),
pollutant=print(x),
main="Minute Validation",
ylab="Minute Conc. (ug/m3 or ppb)",
key=T)
p$plot
}
lapply(i, tp)
})
renderUI({
plot_output_list <- lapply(1:length(tp_list()), function(i) {
plotname <- paste("plot", i, sep="")
plotOutput(plotname)
})
do.call(tagList, plot_output_list)
})
observe({
for (i in 1:length(tp_list())) {
local({
my_i <- i
plotname <- paste("plot", my_i, sep="")
output[[plotname]] <- renderPlot({
tp_list()[[my_i]]
})
})
}
})
```
```{r plot,echo=FALSE,message=FALSE}
renderPlot({
i<-names(d())[-1]
tp<-function(x){
p<-timePlot(d(),
pollutant=print(x),
main="Minute Validation",
ylab="Minute Conc. (ug/m3 or ppb)",
key=T)
p$plot
}
tp(i)
})
```