choroplethr、ggmap 或 ggplot2 中的道路和半径圆

Posted

技术标签:

【中文标题】choroplethr、ggmap 或 ggplot2 中的道路和半径圆【英文标题】:Roads and Radius Circles in choroplethr, ggmap, or ggplot2 【发布时间】:2015-12-08 14:25:41 【问题描述】:

我正在使用library(choroplethr) 进行一些市场分析,我对制作我的county_choropleth 以及将其覆盖在ggmap() 之上或在我的代码中使用reference_map=TRUE 有一些疑问。我正在尝试做的是拿我的县 choropleth 并放置州际/高速公路并在其上绘制圆圈/半径。

我目前拥有的是这样的:

library(choroplethr)
data <- Data.frame(County.FIPS = c(19153,19163,19153,19153,19153,19153,19153,19113,19007,19169), Score=c(812.6,769.5,757.9,757.2,722.6,712.4,69727,690.2,64539,642.5)
county <-aggregate(data$Score~data$County.FIPS,data=data,sum)
colnames(county) <- c("region", "value")
mp <- county_choropleth(county, state_zoom=c("iowa"), num_colors = 1) +
  theme(legend.position="none")+
  scale_fill_gradient2("Score", 
                       high = "dark green", 
                       low = "red", 
                       na.value = "grey90", 
                       breaks = pretty(county$value, n = 10), 
                       label = scales::dollar_format())

...这给了我这个情节。

从这里开始,我想做的是在我的地图上覆盖爱荷华州的主要州际公路,并创建一些半径圆圈以显示与某些城市的距离(以英里为单位)。希望它从这张地图中获取元素,并在理想情况下将它们合并到我的 choroplethr 地图中,因为在我看来,它看起来比在这个例子中要干净得多:

我使用此代码检索第二张地图:

library(ggmap)
test<-get_map(location = c(lon=-93.57217,lat=41.67269), maptype="roadmap",source="google",zoom=7,scale="auto")
yup <- data.frame(lon=c(-93.57217,-95.87509), lat=c(41.67269,41.23238),score=c(1,1))
ggmap(test) + stat_density2d(aes(x = lon, y = lat, fill = score,alpha=score), 
               size = 2, bins = 2, data = yup, geom = "polygon") +
  theme(legend.position="none")

我在choroplethr 库中使用reference_map=TRUE 的主要问题是,当我将county_choropleth 放在它上面时,它会使标签、道路等变灰。例如,

那么,是否有一种简单的解决方法可以在地图上包含道路和绘制圆圈,或者我是否需要放弃使用 choroplethr 并转而使用 ggmap、ggplot2 或其他方式?我还能够在他们的网站上找到道路的爱荷华州 DOT 形状文件,因此这是一个包含的选项,但我不知道如何具体要求它在绘图和读取 R 时仅使用主要的州际公路/高速公路。

这是我对这个问题的“理想”MS Paint 解决方案:

提前感谢您的任何和所有帮助,如果您有任何需要回答的澄清问题以便提供帮助,请告诉我!

【问题讨论】:

我没有给你答案,但我认为传单可以让你做任何你想做的事情。输出是一个 html 文档,但您可以对其进行快照 所以查看传单,到目前为止,我已经能够提出this。然后我的问题变成了我如何像上面所做的那样给县贴上标签?我必须使用形状文件还是仍然可以像以前一样使用县 FIPS?顺便说一句,传单是一个很棒的工具,我非常感谢你让我开始使用它! 不错!!!尝试添加弹出窗口rstudio.github.io/leaflet/shapes.html 感谢您的帮助和建议!我能够弄清楚我的答案并将其发布在下面以供感兴趣的人使用。 【参考方案1】:

对于那些后来偶然发现的人。通过将库更改为 leaflettigris,我能够实现我希望做的事情。

我计划进行最后的调整以供个人使用,但这里是使用的代码:

library(tigris)
library(leaflet)

data <- data.frame(County.FIPS = c(19153,19163,19153,19153,19153,19153,19153,19113,19007,19169), Score=c(812.6,769.5,757.9,757.2,722.6,712.4,69727,690.2,64539,642.5))
county <-aggregate(data$Score~data$County.FIPS,data=data,sum)
colnames(county) <- c("GEOID", "Score")

IA_counties <- counties(state="IA", cb=TRUE, resolution ="20m")
IA_merged <- geo_join(IA_counties,county,"GEOID", "GEOID")
pal <- colorQuantile("Greens",NULL,n=3)
popup <- paste0("Profitability: ", as.character(IA_merged$Score))

yup2 <- data.frame(lon=c(-93.57217,-95.93779),lat=c(41.67269,41.25861),score=c(1,1))

leaflet() %>%
  addProviderTiles("Esri.WorldStreetMap") %>%
      addLegend(pal = pal, 
      values = IA_merged$Score, 
      position = "bottomright", 
      title = "County Profitablity: ") %>%
  addCircles(lng=yup2$lon, lat=yup2$lat,weight=1,fillOpacity=0.05,color="red",
      radius = 96560) %>%
  addCircles(lng=yup2$lon, lat=yup2$lat,weight=1,fillOpacity=0.025,color="blue",
      radius = 193121) %>%
  addPolygons(data = IA_counties, 
      fillColor = ~pal(IA_merged$Score), 
      fillOpacity = 0.15, 
      weight = 0.2, 
      popup = popup)

【讨论】:

以上是关于choroplethr、ggmap 或 ggplot2 中的道路和半径圆的主要内容,如果未能解决你的问题,请参考以下文章

查找比例 x 或 y 连续的限制或避免删除 ggplot2 和 ggmap 中的行

GIS | R 数据可视化:ggmap包

在 R ggmap 中绘制自定义边框

图例标题对齐 (ggmap)

绘制 ggmap 和 sf 点

使用 ggmap 和 ggplotly