使用ggplot在Shiny中使用二元运算符的非数字参数

时间:2017-06-29 15:29:19

标签: r ggplot2 shiny gis shapefile

我正在编写我的第一个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中的ñ,也将非常受欢迎。

1 个答案:

答案 0 :(得分:0)

这是你从

得到的错误
Nr

由于您的图表功能以NULL + scale_fill_gradient2(low='#89D1F3',high='#006EC1') 开头,我的猜测是if(varsel=="-"){return (NULL)}varsel时会产生此错误。如果没有选择任何内容,请尝试返回空白"-"对象。

ggplot