【问题标题】:How to overlay two maps using R ggplot如何使用 R ggplot 覆盖两个地图
【发布时间】:2020-03-16 15:38:51
【问题描述】:

我正在尝试使用以下代码按区域绘制一种类型的暴露率图。我不需要按州绘制的任何内容,而是想显示下面定义的每个部门的费率。第一张地图就是我想要的区域。这似乎工作正常。但是当我尝试叠加汇率时,我在地图中得到了疯狂的形状。地图效果很好,但是当我覆盖费率时,它根本不起作用。有没有人有任何建议来解决这个问题?

             library(ggplot2)
             library(ggmap)
             library(maps)
             library(mapdata)
             library(maptools)
   if (require("maps")) {
 states <- map_data("state")}


us_state_map = map_data("state")
colnames(state_shape)

#map each state to a division
us_state_map$division[us_state_map$region %in% c("connecticut", "maine", "massachusetts", "new hampshire", "rhode island", "vermont")] <- "1"
us_state_map$division[us_state_map$region %in% c("district of columbia", "maryland", "new jersey","pennsylvania","west virginia" ,"delaware")] <- "2"
us_state_map$division[us_state_map$region %in% c("alabama","florida","georgia","arkansas","louisiana", "mississippi")] <- "3"
us_state_map$division[us_state_map$region %in% c("oklahoma","texas")] <- "4"
us_state_map$division[us_state_map$region %in% c("arizona","california","utah", "new mexico", "nevada")] <- "5"
us_state_map$division[us_state_map$region %in% c("alaska","idaho","oregon","washington","montana","hawaii")] <- "6"
us_state_map$division[us_state_map$region %in% c("illinois","north dakota","minnesota","south dakota","wisconsin")] <- "7"
us_state_map$division[us_state_map$region %in% c("colorado","iowa","kansas","missouri","nebraska", "wyoming" )] <- "8"
us_state_map$division[us_state_map$region %in% c("new york")] <- "9"
us_state_map$division[us_state_map$region %in% c("indiana", "michigan", "ohio")] <- "10"
us_state_map$division[us_state_map$region %in% c("north carolina","south carolina","tennessee", "kentucky", "virginia")] <- "11"

map <- ggplot() 
map = map + geom_polygon(data=us_state_map, aes(x=long, y=lat, group=group, fill=division))
map


map <- ggplot() 
map = map + geom_polygon(data=us_state_map.mod, aes(x=long, y=lat, group=group, fill=division))
map

map2<- map + 
  geom_polygon(data = regions_after, aes(x=long, y=lat, group=group, fill = percent_virtual)) +
  geom_polygon(color = "black", fill = NA) + # get the state border back on top
theme_bw() +scale_fill_continuous(low="blue", high="red")+
  ditch_the_axes


map2


after reading both comments, i think this is an appropriate sample: zz <-"division total percent_virtual long lat group region 1 1836 7.5163399 -70.22171 43.59063 18 maine 1 1836 7.5163399 -71.84318 41.34464 46 rhode island 1 1836 7.5163399 -70.6457 41.94624 21 massachusetts 1 1836 7.5163399 -72.20988 41.2988 6 connecticut 1 1836 7.5163399 -73.36152 45.01157 52 vermont 1 1836 7.5163399 -72.50208 42.9661 31 new hampshire 2 6451 1.7516664 -76.55862 38.42828 19 maryland 2 6451 1.7516664 -79.06245 42.00354 45 pennsylvania 2 6451 1.7516664 -74.72516 41.36755 32 new jersey

【问题讨论】:

  • 对我来说第一个map 没问题。这不是您要在map2 中映射的内容。您能否提供数据集“regions_after”和“us_state_map.mod”的可重现示例? (见此链接:stackoverflow.com/questions/5963269/…
  • 在阅读了两个 cmets 之后,我认为这是一个合适的示例:zz
  • 如果你编辑你的问题来添加这些数据会更好;)我会让人们更容易跟进。

标签: r ggplot2 choropleth


【解决方案1】:

有点复杂的代码。这里简化了。请注意,并非所有包库调用都是相关的。只需在同一 geom_polygon 调用中添加颜色(黑色)。 为您的州分配不同的部门名称可能有更好的方法。

library(ggplot2)
library(mapdata)
#> Loading required package: maps

us_state_map = map_data("state")

#map each state to a division
us_state_map$division[us_state_map$region %in% c("connecticut", "maine", "massachusetts", "new hampshire", "rhode island", "vermont")] <- "1"
us_state_map$division[us_state_map$region %in% c("district of columbia", "maryland", "new jersey","pennsylvania","west virginia" ,"delaware")] <- "2"
us_state_map$division[us_state_map$region %in% c("alabama","florida","georgia","arkansas","louisiana", "mississippi")] <- "3"
us_state_map$division[us_state_map$region %in% c("oklahoma","texas")] <- "4"
us_state_map$division[us_state_map$region %in% c("arizona","california","utah", "new mexico", "nevada")] <- "5"
us_state_map$division[us_state_map$region %in% c("alaska","idaho","oregon","washington","montana","hawaii")] <- "6"
us_state_map$division[us_state_map$region %in% c("illinois","north dakota","minnesota","south dakota","wisconsin")] <- "7"
us_state_map$division[us_state_map$region %in% c("colorado","iowa","kansas","missouri","nebraska", "wyoming" )] <- "8"
us_state_map$division[us_state_map$region %in% c("new york")] <- "9"
us_state_map$division[us_state_map$region %in% c("indiana", "michigan", "ohio")] <- "10"
us_state_map$division[us_state_map$region %in% c("north carolina","south carolina","tennessee", "kentucky", "virginia")] <- "11"

ggplot() +
geom_polygon(data=us_state_map, aes(x=long, y=lat, group=group, fill=division), color = 'black') 

reprex package (v0.3.0) 于 2020 年 3 月 16 日创建

现在您想用fill 可视化另一个维度,只是覆盖?这很困难——我们在这里处理的是二维纸。考虑改变审美。例如,为您的分区使用颜色,然后您可以为您的百分比值使用填充。使用具有相同区域多边形 (!!!) 的相同数据框来分配这些值非常重要。

library(tidyverse)

us_state_map <- us_state_map  %>% mutate(percent_virtual = group)

ggplot() +
geom_polygon(data=us_state_map, aes(x=long, y=lat, group=group, color = division, fill = percent_virtual), size = 1.5 )

reprex package (v0.3.0) 于 2020-03-16 创建

附:我不一定觉得上面的情节解决方案很好,只是为了展示不同维度的不同美学的使用。

【讨论】:

  • 谢谢,这很有帮助。我不需要任何州信息。相反,我只想反映地区。虚拟数据百分比是按地区划分的,但我认为我必须在数据集中有状态才能映射它
【解决方案2】:

感谢您的帮助,我发现这与数据的合并方式有关。它需要是一个left_join

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    相关资源
    最近更新 更多