使用ggplot在Shiny中二元运算符的非数字参数
Non-numeric argument to binary operator in Shiny using ggplot
我正在编写我的第一个 Shiny 应用程序,试图将用于绘制西班牙地图的代码移植到任何不了解 R 的人都可以使用的 Shiny 应用程序中。
最近我在尝试更改函数返回的 ggplot 时遇到了一个问题。
我将 post 我的代码的简化版本。
我首先在 helper.R 中有一个函数,它从 ui 和 returns 一个 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 中以便图表可以如前所述个性化。
*:可以使用运行GitHub("Mapas_BBVA_provincias","IArchondo")测试该版本的应用程序。任何有关西班牙字符显示的帮助,例如 ui 中的 ñ,也将非常受欢迎。
这是你从
得到的错误
NULL + scale_fill_gradient2(low='#89D1F3',high='#006EC1')
由于您的绘图函数以 if(varsel=="-"){return (NULL)}
开头,我猜测此错误是在 varsel
为 "-"
时产生的。尝试在未选择任何内容时返回空白 ggplot
对象。
if(varsel=="-"){return (ggplot())}
我正在编写我的第一个 Shiny 应用程序,试图将用于绘制西班牙地图的代码移植到任何不了解 R 的人都可以使用的 Shiny 应用程序中。
最近我在尝试更改函数返回的 ggplot 时遇到了一个问题。
我将 post 我的代码的简化版本。
我首先在 helper.R 中有一个函数,它从 ui 和 returns 一个 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 中以便图表可以如前所述个性化。
*:可以使用运行GitHub("Mapas_BBVA_provincias","IArchondo")测试该版本的应用程序。任何有关西班牙字符显示的帮助,例如 ui 中的 ñ,也将非常受欢迎。
这是你从
得到的错误NULL + scale_fill_gradient2(low='#89D1F3',high='#006EC1')
由于您的绘图函数以 if(varsel=="-"){return (NULL)}
开头,我猜测此错误是在 varsel
为 "-"
时产生的。尝试在未选择任何内容时返回空白 ggplot
对象。
if(varsel=="-"){return (ggplot())}