我正在编写我的第一个Shiny应用程序,试图将用于绘制西班牙地图的代码移植到一个Shiny应用程序中,任何不了解R的人都可以使用。
最近我在尝试更改函数返回的ggplot时遇到了问题。
我将发布我的代码的简化版本。
我首先在 helper.R 中有一个函数,它接受来自ui的各种输入并返回一个gg和一个数据帧:
graphing=function(datax,setter,selCCAA,varsel){
map=readShapeSpatial('prov_map.shp')
map@data$CodProv=as.integer(map@data$CodProv)
map@data=merge(map@data,datax,by.x='CodProv',by.y='CodProv',sort=F)
map@data$id=rownames(map@data)
map.points=fortify(map,region='id')
map.df=join(map.points,map@data,by='id')
map.df$Cd_CCAAint=as.integer(map.df$Cd_CCAA)
if(varsel=="-"){return (NULL)}
else {
if (setter==0){
mapa=ggplot(map.df)+
aes_string("long","lat",group="group",fill=varsel)+
geom_polygon()+
geom_path(color='white')+
coord_equal()
return(list(mapa,map.df))
}
else {
map.dfx<-subset(map.df,map.df$Cd_CCAAint==selCCAA)
mapa=ggplot(map.dfx)+
aes_string("long","lat",group="group",fill=varsel)+
geom_polygon()+
geom_path(color='white')+
coord_equal()
return(list(mapa,map.dfx))
}
}
}
然后,在 server.R 中,我获取该函数返回的gg并添加更多行,以便用户可以个性化图形的颜色,中点等。
output$plot=renderPlot({
mapa=graphing(dataini,input$setter,input$selCCAA,input$varsel)
grafico=mapa[[1]]+
scale_fill_gradient2(low='#89D1F3',high='#006EC1')+
theme(legend.position='bottom',axis.title.x=element_blank(),
axis.title.y=element_blank(),axis.ticks=element_blank(),axis.text=element_blank(),
panel.grid.minor=element_blank(),panel.grid.major=element_blank())
grafico
})
当我运行应用程序包括scale_fill_gradient2行或任何类型的geom时,我收到以下错误:
Warning: Error in +: non-numeric argument to binary operator
当我只包含主题时,不会出现错误。
到目前为止,两条线已经包含在图形功能中,并且应用程序运行良好*,但我需要它们在server.R中,因此图形可以如前所述进行个性化。
*:可以使用runGitHub(“Mapas_BBVA_provincias”,“IArchondo”)测试该版本的应用程序。任何帮助显示西班牙语字符,如在ui中的ñ,也将非常受欢迎。
答案 0 :(得分:0)
这是你从
得到的错误Nr
由于您的图表功能以NULL + scale_fill_gradient2(low='#89D1F3',high='#006EC1')
开头,我的猜测是if(varsel=="-"){return (NULL)}
为varsel
时会产生此错误。如果没有选择任何内容,请尝试返回空白"-"
对象。
ggplot