使用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())}