R / Leaflet中的TopoJSON等值线?

时间:2015-12-13 04:55:45

标签: r leaflet topojson choropleth census

是否可以使用R / leaflet为其中一个等值的样本设置TopoJSON文件的样式?尝试了一些事情,我不确定使用leaflet包是否这是不可能的,或者我只是没有正确的语法,特别是访问要输入pal()函数的属性。这就是我所拥有的:

pal<-colorNumeric(palette ="YlOrRd",domain = USAdata$GINI) #USAdata data frame I merged with the spdf before converting it to shp/topojson

map<-leaflet() %>% 
  addTiles(options=tileOptions(minZoom = 3)) %>% 
  setMaxBounds(-167.276413,5.499550,-52.233040, 83.162102) %>%
  setView(93.85,37.45,zoom =3) %>%
  #addGeoJSON(geojson = jso5)
  addTopoJSON(topojson=jso, fillColor = ~pal("GINI"))
#addPolygons(data=poly)

这会引发错误:

"Error in UseMethod("doResolveFormula") : 
  no applicable method for 'doResolveFormula' applied to an object of class "NULL""

我也尝试使用fromJSON()并添加样式元素将其转换为带有topojson的R对象,但在尝试使用toJSON()将其发送回来后,这将不会加载。

不确定是否相关,但topojson是根据说明here制作的shapefile创建的:

与cl:

topojson -o 'USApuma.json' --shapefile-encoding utf8 --id-property=+GEOID10 -p GINI,+STATEFP10,+GEOID10 -- 'usaetest.shp'

然后用readLines()读入。

最终试图把它扔进一个闪亮的应用程序。这是我somefollowing个例子。

1 个答案:

答案 0 :(得分:1)

您需要使用TopoJSON吗?如果不考虑使用 tigris 包(披露:我创建并维护包)。它可以让您访问您需要的任何Census地理数据集,并与传单很好地配合使用。这是一个与您正在做的事情相符的简短示例。例如,您可以使用以下代码获取美国大陆的所有PUMA:

library(readr)
library(tigris)
library(leaflet)

us_states <- unique(fips_codes$state)[1:51]

continental_states <- us_states[!us_states %in% c("AK", "HI")]

pumas_list <- lapply(continental_states, function(x) {
  pumas(state = x, cb = TRUE)
})

us_pumas <- rbind_tigris(pumas_list)

我已经生成了一个样本数据集,用于测量此示例中PUMA家庭收入中位数; tigris 包中的geo_join函数可以将数据集合并到空间数据框us_pumas

puma_income <- read_csv('http://personal.tcu.edu/kylewalker/data/puma_income.csv')

joined_pumas <- geo_join(us_pumas, puma_income, 'GEOID10', 'GEOID')

然后我们可以用Leaflet绘图:

pal <- colorQuantile(palette = 'YlOrRd', domain = joined_pumas$hhincome, n = 7)

leaflet(joined_pumas) %>% 
  addProviderTiles('CartoDB.Positron') %>% 
  addPolygons(weight = 0.5, fillColor = ~pal(hhincome), 
              color = 'lightgrey', fillOpacity = 0.75, 
              smoothFactor = 0.2) %>% 
  addLegend(pal = pal, 
            values = joined_pumas$hhincome)

PUMA median household income

如果您打算构建一个Shiny应用程序,我建议首先将您从 tigris 获得的PUMA保存为.rda文件并使用您的Shiny读取它脚本让你每次都不必rbind_tigris