在美国地图上绘制数值

Plotting Numerical Values on US Maps

我的数据如下,我在代码中称之为shortie:

   State  Min  Max   Average
1     AL  7.0 10.8  8.842857
2     AK  6.9 10.2  8.095238
3     AZ  5.4 10.0  6.623810
4     AR  9.5 15.4 12.157143
5     CA  5.8  7.9  6.309524
6     CO  6.5  9.8  7.557143
7     CT  5.0  7.9  5.700000
8     DE  5.2  8.4  6.090476
9     FL  7.0 10.9  8.423810
10    GA  6.0 10.3  7.094737
11    HI 15.3 22.6 18.652381
12    ID  7.8 13.9  9.957143
13    IL  5.4  8.8  6.300000
14    IN  6.3  9.6  7.423810
15    IA  6.1  9.0  6.971429
16    KS  5.9  9.2  6.880952
17    KY  6.9 13.5  8.609524
18    LA  5.6  9.6  7.500000
19    ME  7.1  9.7  8.004762
20    MD  5.6  9.7  6.757143
21    MA  5.5  7.9  5.961905
22    MI  5.4  8.2  6.171429
23    MN  5.3  7.7  6.066667
24    MS  4.8  9.4  6.376190
25    MO  6.2  9.6  7.114286
26    MT  7.1  8.6  7.576190
27    NE  6.3  8.0  6.942857
28    NV 28.4 99.0 52.614286
29    NH  6.5  9.5  7.576190
30    NJ  4.8  7.6  5.676190
31    NM  4.0  8.8  7.042857
32    NY  6.5  8.6  7.095238
33    NC  6.5  8.5  7.233333
34    ND  5.8  7.5  6.623810
35    OH  5.7  9.0  6.547619
36    OK  6.5 10.6  7.323529
37    OR  6.3  8.9  7.176190
38    PA  5.3  7.1  5.771429
39    RI  5.8  8.1  6.885714
40    SC  6.6 15.9  8.638095
41    SD  6.7 11.1  8.128571
42    TN  8.2 15.5 10.838095
43    TX  6.9 10.5  7.928571
44    UT  7.3 11.2  9.290476
45    VT  7.9 10.9  9.071429
46    VA  6.7 11.4  7.900000
47    WA  6.0  9.5  6.695238
48    WV  6.1  8.7  7.133333
49    WI  5.2  7.9  5.995238
50    WY  7.1 10.7  8.723810

我尝试了多种方法在美国地图上绘制此数据,我想要单独的图,只有最大值、最小值或平均值。

plot_usmap(regions="states", values="minimum")
plot_usmap(shortie, regions="states", values="minimum")
plot_usmap(shortie, regions="states", values="Min")

我要么得到空白地图,要么得到空白屏幕。我尝试将 "minimum" 定义为 shortie[2:2],因为有时我会收到错误消息,即在数据中找不到 Min 作为列。

此代码 运行s 但如您所见,它很长,出于某种原因它没有给佛罗里达赋予价值,如果我包括阿拉斯加也没有 运行和夏威夷。下面的代码没有阿拉斯加和夏威夷。此外,我想知道除了梯度之外,还有哪些其他替代方法可以在状态上直观地表示数字的 min/max/avg,可能通过 ggplot。

map.text("state", regions=c("alabama",
                            "arizona",
                            "arkansas",
                            "california",
                            "colorado",
                            "connecticut",
                            "delaware",
                            "district of columbia",
                            "florida",
                            "georgia",
                            "idaho",
                            "illinois",
                            "indiana",
                            "iowa",
                            "kansas",
                            "kentucky",
                            "louisiana",
                            "maine",
                            "maryland",
                            "massachusetts:main",
                            "michigan:north",
                            "minnesota",
                            "mississippi",
                            "missouri",
                            "montana",
                            "nebraska",
                            "nevada",
                            "new hampshire",
                            "new jersey",
                            "new mexico",
                            "new york:main",
                            "north carolina:main",
                            "north dakota",
                            "ohio",
                            "oklahoma",
                            "oregon",
                            "pennsylvania",
                            "rhode island",
                            "south carolina",
                            "south dakota",
                            "tennessee",
                            "texas",
                            "utah",
                            "vermont",
                            "virginia:main",
                            "washington:main",
                            "west virginia",
                            "wisconsin",
                            "wyoming"), labels=as.character(c(7,
5.4,
9.5,
5.8,
6.5,
5,
5.2,
4,
7,
6,
7.8,
5.4,
6.3,
6.1,
5.9,
6.9,
5.6,
7.1,
5.6,
5.5,
5.4,
5.3,
4.8,
6.2,
7.1,
6.3,
28.4,
6.5,
4.8,
4,
6.5,
6.5,
5.8,
5.7,
6.5,
6.3,
5.3,
5.8,
6.6,
6.7,
8.2,
6.9,
7.3,
7.9,
6.7,
6,
6.1,
5.2,
7.1)))

根据您的数据框,您可以执行以下操作:

1) 使用包maps,您可以得到一张包含美国各州坐标的地图,如下所示。在此包中,您可以添加一列用于州名缩写。

library(maps)
states <- map_data("state")
DF <- states 
DF$Abrev. <- unlist(sapply(DF$region, function(x) match(toupper(x), toupper(state.name))))
DF$Abrev. <- state.abb[DF$Abrev.]

2) 您可以使用缩写状态名称(此处使用 dplyr 包中的 left_join )将您的值与此数据框 "DF" 合并,并将您的数据框重塑为更长的格式以创建每个变量的分类值(最大值、最小值、平均值)(此处使用 tidyr 包中的 pivot_longer):

library(dplyr)
library(tidyr)
DF <- left_join(DF, df, by = c("Abrev." = "State"))
DF <- DF %>% pivot_longer(., cols = c(Min, Max, Average), names_to = "variable", values_to = "value")

# A tibble: 6 x 9
   long   lat group order region  subregion Abrev. variable value
  <dbl> <dbl> <dbl> <int> <chr>   <chr>     <chr>  <chr>    <dbl>
1 -87.5  30.4     1     1 alabama NA        AL     Min       7   
2 -87.5  30.4     1     1 alabama NA        AL     Max      10.8 
3 -87.5  30.4     1     1 alabama NA        AL     Average   8.84
4 -87.5  30.4     1     2 alabama NA        AL     Min       7   
5 -87.5  30.4     1     2 alabama NA        AL     Max      10.8 
6 -87.5  30.4     1     2 alabama NA        AL     Average   8.84
...

3) 最后,您可以使用 ggplot2 中的 geom_map 绘制它,并使用 facet_wrap 为每个变量 Max、Min、Average 创建一张美国地图,方法是:

library(ggplot2)
ggplot(DF, aes(map_id = region))+
  geom_map(aes(fill = value), map = states)+
  expand_limits(x = states$long, y = states$lat)+
  facet_wrap(.~variable)+

它能回答您的问题吗?

如果您想使用 plot_usmap,您需要确保向该函数提供 2 列数据:

A data frame containing values to plot on the map. This parameter should be a data frame consisting of two columns, a fips code (2 characters for state, 5 characters for county) and the value that should be associated with that region. The columns of data must be fips or state and the value of the 'values' parameter.

所以如果你想绘制 minimum 你可以继续 shortie[,2:3]:

   state  Min
1     AL  7.0
2     AK  6.9
3     AZ  5.4
4     AR  9.5
5     CA  5.8
...

请注意,state 列名称应小写以符合 plot_usmap 的预期。

然后下面的应该工作(设置values = "Min"):

library(usmap)
library(ggplot2)

plot_usmap(data = shortie[,2:3], 
           regions="states", 
           values="Min") +
  theme(legend.position = "right")

如果要绘制 Max,请使用 shortie[,c(2,4)]values = "Max"。 如果要绘制 Average,请使用 shortie[,c(2,5)]values = "Average".