我使用函数在R中绘图,因为这是绘图(六边形等)的相当大的代码。为了整洁的代码我把它放在一个函数中。
这是关于SOM算法,现在并不重要,但我创建了我需要的数据,然后我通常使用以下代码绘制它:
mydata <- som_model$codes
var <- 1
title <- names(som_model$data)[var]
dataplot <- matrix(mydata[,var],nrow=gridsize,ncol=gridsize,byrow=TRUE)
source('plotHexMap.R')
plotHexMap(dataplot,title,gridsize)
所以现在我想在Shiny中做到这一点:
observe({
if(input$plottrained>0){
var <- 1
title <- names(som_model$data)[var]
dataplot<-matrix(mydata[,var],nrow=gridsize,ncol=gridsize,byrow=TRUE)
source("plotHexMap.R")
output$plot1 <-renderPlot({plotHexMap(dataplot,title,gridsize)})
}
})
好的,所以这不起作用,但是当我将绘图写入一个全局变量(&lt;&lt ;-)时,它确实存在,我可以在图中看到它,所以通过这样做:
observe({
if(input$plottrained>0){
var <- 1
title <- names(som_model$data)[var]
dataplot<-matrix(mydata[,var],nrow=gridsize,ncol=gridsize,byrow=TRUE)
source("plotHexMap.R")
plot1 <<-renderPlot({plotHexMap(dataplot,title,gridsize)})
}
})
我在这里缺少什么?正常的R环境不需要从功能中绘制这个有什么特点?
真的很感激任何帮助!提前谢谢,
彼得
答案 0 :(得分:0)
而不是observe
,请在服务器中尝试renderPlot
:
output$myplot <- renderPlot({
if(input$plottrained>0){
var <- 1
title <- names(som_model$data)[var]
dataplot<- matrix(mydata[,var],nrow=gridsize,ncol=gridsize,byrow=TRUE)
source("plotHexMap.R", local = TRUE) #assuming this file is actually local for you
plot1 <- plotHexMap(dataplot,title,gridsize)
}
else{return(NULL)}
})
然后在ui中使用plotOutput:
plotOutput('myplot')