簡體   English   中英

如何使用 R ggplot 疊加兩張地圖

[英]How to overlay two maps using R ggplot

我正在嘗試使用以下代碼繪制按區域划分的暴露類型的比率圖。 我不需要州繪制的任何內容,而是希望顯示下面定義的每個部門的費率。 第一張地圖就是我想要的地區。 這似乎工作正常。 但是當我嘗試覆蓋率時,我在地圖中得到了瘋狂的形狀。 地圖效果很好,但是當我疊加費率時,它根本不起作用。 有沒有人有任何建議來解決這個問題?

             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

在此處輸入圖片說明

有點復雜的代碼。 這里簡化了。 請注意,並非所有包庫調用都是相關的。 只需在同一個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 包(v0.3.0) 於 2020 年 3 月 16 日創建

現在你想用fill可視化另一個維度,只是覆蓋? 這很困難——我們在這里處理的是二維紙。 考慮改變審美。 例如,對您的分區使用顏色,然后您可以對您的precent 值使用填充。 使用具有相同區域多邊形 (!!!) 的相同數據框來分配這些值非常重要。

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 包(v0.3.0) 於 2020 年 3 月 16 日創建

PS我不一定覺得上面的情節解決方案很好,只是為了演示不同維度的不同美學的使用。

感謝您的幫助,我發現這與數據的合並方式有關。 它需要是一個 left_join

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM