r - 如何在 R 中的 ggplot2 中使用一个标签将特定状态按组合并在一起?

标签 r ggplot2 usmap

我想绘制美国的电网 map ,所以我需要将特定的州合并在一起。我想一起为这些州绘制边界,但它不起作用。每组也只有一个标签。这是我的数据:[https://iastate.box.com/s/12xru62lvmbbkrohsn7b4wwexq11umn7] 这是我的代码:

# Join and arrange
 states <- us_map(exclude = c("AK", "HI"))
 states_data <- left_join(states, myinput, by = c("abbr" = "region")) |> 
 arrange(emission, growth, group, order)

ggplot(states_data, aes(x, y, fill = value, group = group, subgroup = grid)) +
geom_polygon()+
scale_fill_continuous(low = "white", high = "red", name = "Ele gen (EJ)", label = 
scales::comma) +
facet_grid(emission~growth) +
coord_equal() +
ggthemes::theme_map() +
theme(legend.position = "bottom")+
geom_text(aes(x, y, label = grid),size = 5,family = "serif",
        data = states_data, vjust = 1.2, nudge_y = -100000,check_overlap = T)+
geom_polygon(aes(color = "Border", group=grid),fill = NA,color = "black")

这不是我中间的输出: enter image description here

我想绘制这些区域(加上要指定的边框,因为我无法用不同的颜色显示它们) enter image description here

数据

structure(list(region = c("AL", "AR", "AZ", "CA", "CO", "CT", 
"DC", "DE", "FL", "GA", "IA", "ID", "IL", "IN", "KS", "KY", "LA", 
"MA", "MD", "ME", "MI", "MN", "MO", "MS", "MT", "NC", "ND", "NE", 
"NH", "NJ", "NM", "NV", "NY", "OH", "OK", "OR", "PA", "RI", "SC", 
"SD", "TN", "TX", "UT", "VA", "VT", "WA", "WI", "WV", "WY", "AL", 
"AR", "AZ", "CA", "CO", "CT", "DC", "DE", "FL", "GA", "IA", "ID", 
"IL", "IN", "KS", "KY", "LA", "MA", "MD", "ME", "MI", "MN", "MO", 
"MS", "MT", "NC", "ND", "NE", "NH", "NJ", "NM", "NV", "NY", "OH", 
"OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VA", "VT", 
"WA", "WI", "WV", "WY", "AL", "AR", "AZ", "CA", "CO", "CT", "DC", 
"DE", "FL", "GA", "IA", "ID", "IL", "IN", "KS", "KY", "LA", "MA", 
"MD", "ME", "MI", "MN", "MO", "MS", "MT", "NC", "ND", "NE", "NH", 
"NJ", "NM", "NV", "NY", "OH", "OK", "OR", "PA", "RI", "SC", "SD", 
"TN", "TX", "UT", "VA", "VT", "WA", "WI", "WV", "WY", "AL", "AR", 
"AZ", "CA", "CO", "CT", "DC", "DE", "FL", "GA", "IA", "ID", "IL", 
"IN", "KS", "KY", "LA", "MA", "MD", "ME", "MI", "MN", "MO", "MS", 
"MT", "NC", "ND", "NE", "NH", "NJ", "NM", "NV", "NY", "OH", "OK", 
"OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VA", "VT", "WA", 
"WI", "WV", "WY"), value = c(6.22256321333333, 6.22256321333333, 
2.20794523906666, 1.49034165333333, 2.20794523906666, 0.826546816817333, 
2.61905459786667, 2.61905459786667, 1.65110329, 6.22256321333333, 
1.59528739166667, 3.0363665376, 3.13763399333332, 3.865420576, 
0.790624669333333, 3.865420576, 6.22256321333333, 0.826546816817333, 
2.61905459786667, 0.826546816817333, 3.865420576, 1.59528739166667, 
3.13763399333332, 6.22256321333333, 3.0363665376, 6.22256321333333, 
1.59528739166667, 1.59528739166667, 0.826546816817333, 2.61905459786667, 
2.20794523906666, 3.0363665376, 1.21040939333333, 3.865420576, 
0.790624669333333, 3.0363665376, 2.61905459786667, 0.826546816817333, 
6.22256321333333, 1.59528739166667, 6.22256321333333, 3.50149982333333, 
3.0363665376, 6.22256321333333, 0.826546816817333, 3.0363665376, 
3.13763399333332, 3.865420576, 2.20794523906666, 6.58823506033333, 
6.58823506033333, 2.33729970666667, 1.35043392, 2.33729970666667, 
0.7918773089276, 2.64941819863333, 2.64941819863333, 1.84968858666667, 
6.58823506033333, 1.69423596966667, 2.82831107136667, 3.22375391666666, 
4.14114214399999, 0.816646300333333, 4.14114214399999, 6.58823506033333, 
0.7918773089276, 2.64941819863333, 0.7918773089276, 4.14114214399999, 
1.69423596966667, 3.22375391666666, 6.58823506033333, 2.82831107136667, 
6.58823506033333, 1.69423596966667, 1.69423596966667, 0.7918773089276, 
2.64941819863333, 2.33729970666667, 2.82831107136667, 1.15469864333333, 
4.14114214399999, 0.816646300333333, 2.82831107136667, 2.64941819863333, 
0.7918773089276, 6.58823506033333, 1.69423596966667, 6.58823506033333, 
3.66557223, 2.82831107136667, 6.58823506033333, 0.7918773089276, 
2.82831107136667, 3.22375391666666, 4.14114214399999, 2.33729970666667, 
6.72966092166666, 6.72966092166666, 2.3737108016, 1.58503659, 
2.3737108016, 0.884016546345666, 2.8041352651, 2.8041352651, 
1.73653393333333, 6.72966092166666, 1.73917558366667, 3.23410557176666, 
3.34795298333333, 4.19485727566666, 0.859289106, 4.19485727566666, 
6.72966092166666, 0.884016546345666, 2.8041352651, 0.884016546345666, 
4.19485727566666, 1.73917558366667, 3.34795298333333, 6.72966092166666, 
3.23410557176666, 6.72966092166666, 1.73917558366667, 1.73917558366667, 
0.884016546345666, 2.8041352651, 2.3737108016, 3.23410557176666, 
1.28265139333333, 4.19485727566666, 0.859289106, 3.23410557176666, 
2.8041352651, 0.884016546345666, 6.72966092166666, 1.73917558366667, 
6.72966092166666, 3.79724887666667, 3.23410557176666, 6.72966092166666, 
0.884016546345666, 3.23410557176666, 3.34795298333333, 4.19485727566666, 
2.3737108016, 6.58823506033333, 6.58823506033333, 2.33729970666667, 
1.35043392, 2.33729970666667, 0.7918773089276, 2.64941819863333, 
2.64941819863333, 1.84968858666667, 6.58823506033333, 1.69423596966667, 
2.82831107136667, 3.22375391666666, 4.14114214399999, 0.816646300333333, 
4.14114214399999, 6.58823506033333, 0.7918773089276, 2.64941819863333, 
0.7918773089276, 4.14114214399999, 1.69423596966667, 3.22375391666666, 
6.58823506033333, 2.82831107136667, 6.58823506033333, 1.69423596966667, 
1.69423596966667, 0.7918773089276, 2.64941819863333, 2.33729970666667, 
2.82831107136667, 1.15469864333333, 4.14114214399999, 0.816646300333333, 
2.82831107136667, 2.64941819863333, 0.7918773089276, 6.58823506033333, 
1.69423596966667, 6.58823506033333, 3.66557223, 2.82831107136667, 
6.58823506033333, 0.7918773089276, 2.82831107136667, 3.22375391666666, 
4.14114214399999, 2.33729970666667), grid = c("Southeast grid", 
"Southeast grid", "Southwest grid", "California grid", "Southwest grid", 
"New England grid", "Mid-Atlantic grid", "Mid-Atlantic grid", 
"Florida grid", "Southeast grid", "Central Northwest grid", "Northwest grid", 
"Central Northeast grid", "Central East grid", "Central Southwest grid", 
"Central East grid", "Southeast grid", "New England grid", "Mid-Atlantic grid", 
"New England grid", "Central East grid", "Central Northwest grid", 
"Central Northeast grid", "Southeast grid", "Northwest grid", 
"Southeast grid", "Central Northwest grid", "Central Northwest grid", 
"New England grid", "Mid-Atlantic grid", "Southwest grid", "Northwest grid", 
"New York grid", "Central East grid", "Central Southwest grid", 
"Northwest grid", "Mid-Atlantic grid", "New England grid", "Southeast grid", 
"Central Northwest grid", "Southeast grid", "Texas grid", "Northwest grid", 
"Southeast grid", "New England grid", "Northwest grid", "Central Northeast grid", 
"Central East grid", "Southwest grid", "Southeast grid", "Southeast grid", 
"Southwest grid", "California grid", "Southwest grid", "New England grid", 
"Mid-Atlantic grid", "Mid-Atlantic grid", "Florida grid", "Southeast grid", 
"Central Northwest grid", "Northwest grid", "Central Northeast grid", 
"Central East grid", "Central Southwest grid", "Central East grid", 
"Southeast grid", "New England grid", "Mid-Atlantic grid", "New England grid", 
"Central East grid", "Central Northwest grid", "Central Northeast grid", 
"Southeast grid", "Northwest grid", "Southeast grid", "Central Northwest grid", 
"Central Northwest grid", "New England grid", "Mid-Atlantic grid", 
"Southwest grid", "Northwest grid", "New York grid", "Central East grid", 
"Central Southwest grid", "Northwest grid", "Mid-Atlantic grid", 
"New England grid", "Southeast grid", "Central Northwest grid", 
"Southeast grid", "Texas grid", "Northwest grid", "Southeast grid", 
"New England grid", "Northwest grid", "Central Northeast grid", 
"Central East grid", "Southwest grid", "Southeast grid", "Southeast grid", 
"Southwest grid", "California grid", "Southwest grid", "New England grid", 
"Mid-Atlantic grid", "Mid-Atlantic grid", "Florida grid", "Southeast grid", 
"Central Northwest grid", "Northwest grid", "Central Northeast grid", 
"Central East grid", "Central Southwest grid", "Central East grid", 
"Southeast grid", "New England grid", "Mid-Atlantic grid", "New England grid", 
"Central East grid", "Central Northwest grid", "Central Northeast grid", 
"Southeast grid", "Northwest grid", "Southeast grid", "Central Northwest grid", 
"Central Northwest grid", "New England grid", "Mid-Atlantic grid", 
"Southwest grid", "Northwest grid", "New York grid", "Central East grid", 
"Central Southwest grid", "Northwest grid", "Mid-Atlantic grid", 
"New England grid", "Southeast grid", "Central Northwest grid", 
"Southeast grid", "Texas grid", "Northwest grid", "Southeast grid", 
"New England grid", "Northwest grid", "Central Northeast grid", 
"Central East grid", "Southwest grid", "Southeast grid", "Southeast grid", 
"Southwest grid", "California grid", "Southwest grid", "New England grid", 
"Mid-Atlantic grid", "Mid-Atlantic grid", "Florida grid", "Southeast grid", 
"Central Northwest grid", "Northwest grid", "Central Northeast grid", 
"Central East grid", "Central Southwest grid", "Central East grid", 
"Southeast grid", "New England grid", "Mid-Atlantic grid", "New England grid", 
"Central East grid", "Central Northwest grid", "Central Northeast grid", 
"Southeast grid", "Northwest grid", "Southeast grid", "Central Northwest grid", 
"Central Northwest grid", "New England grid", "Mid-Atlantic grid", 
"Southwest grid", "Northwest grid", "New York grid", "Central East grid", 
"Central Southwest grid", "Northwest grid", "Mid-Atlantic grid", 
"New England grid", "Southeast grid", "Central Northwest grid", 
"Southeast grid", "Texas grid", "Northwest grid", "Southeast grid", 
"New England grid", "Northwest grid", "Central Northeast grid", 
"Central East grid", "Southwest grid"), emission = c("Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Low Emission", "Low Emission", "Low Emission", "Low Emission", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference", "Reference", 
"Reference", "Reference", "Reference", "Reference"), growth = c("Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "Low Population/GDP", "Low Population/GDP", 
"Low Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP", 
"High Population/GDP", "High Population/GDP", "High Population/GDP"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-196L))

最佳答案

您将需要使用形状文件/简单特征 [sf] 对象,而不仅仅是数据框。

usmap 包是一个高级包,用于方便地制作标准美国 map 。它不附带 shapefile,但包含实际数据框中的多边形数据(由 usmapdata 包提供。此包不支持状态的自定义合并。

在数据框中合并多边形并非不可能,但并不容易。它也将是重新发明轮子,因为 sf 包 就是为这样的事情而构建的。但它仅适用于 shapefiles/sf 对象。

好消息,美国在R世界中并不是一个冷门国家,还有其他包含美国 map 数据的R包,例如美国边界,随 shapefile 一起提供。

sf 包允许您轻松合并(这里这个过程称为unionise)多边形,例如通过简单的总结。 (见下文)。

然后,您可以将 ggplot2 自己的 geom_sf 用于联合多边形,将 geom_sf_textgeom_sf_label 用于标签。

代码中的进一步注释。

library(tidyverse)
## use for example this for US shapefile maps
library(USAboundaries)
## you will need the sf package for some stuff
library(sf)

# my_data <- ... from your question above

states <- us_states()
states <- states[!states$name %in% c("Alaska", "Hawaii"),]
##remove arrange
states_data <- left_join(states, my_data, by = c("state_abbr" = "region" )) %>%
## there is an NA value that needs removal
drop_na(grid)

## this is to unionise the polygons
custom_grids <- 
  states_data %>%
## group by all the variables that occur in the facets
  group_by(grid, emission, growth) %>%
  summarise(value = mean(value))

## you can now plot the unionised polygon sf object with geom_sf and geom_sf_text for labels
ggplot(custom_grids) +
  geom_sf(aes(fill = value)) +
  geom_sf_text(aes(label = grid), check_overlap = T)+
  scale_fill_viridis_c() +
  facet_grid(emission~growth) 

enter image description here

关于r - 如何在 R 中的 ggplot2 中使用一个标签将特定状态按组合并在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72708323/

相关文章:

r - 如何检测 data.frame 是否由子函数中的 dplyr 分组?

r - lm()的输出与R中回归平面方程之间的联系

r - 是否有与 plyr::join_all 等效的 dplyr 或 data.table?通过数据框列表加入?

r - 仅选择 CSV 的特定列

r - ggplot2 中的默认线型?

r - 设置ggplot2标签背景色

r - 使用plot_usmap 的美国 map 图例中的离散值

r - 使用 plot_usmap 包在 R 中创建 map

r - Tmap:无法创建国家级学区 map

r - 如何绘制两组收入群体人口和值(value)观