2

我的数据如下,我在代码中称之为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")

我要么得到空白地图,要么只得到空白屏幕。我尝试将“最小值”定义为 shortie[2:2],因为有时我会得到错误,即在数据中找不到 Min 作为列。

这段代码可以运行,但正如您所见,它很长,并且由于某种原因,它没有对佛罗里达州赋予价值,如果我包括阿拉斯加和夏威夷,它也不会运行。下面的代码没有阿拉斯加和夏威夷。此外,我想知道还有哪些其他替代方法可以在状态上直观地表示数字的最小值/最大值/平均值,而不仅仅是梯度,可能是通过 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)))
4

2 回答 2

2

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

包含要在地图上绘制的值的数据框。这个参数应该是一个数据框,由两列组成,一个 fips 代码(2 个字符代表州,5 个字符代表县)和应该与该区域关联的值。数据列必须是 fips 或 state 以及“values”参数的值。

所以如果你想绘图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")

带有 plot_usmap 的地图

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

于 2020-02-02T04:17:59.473 回答
0

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

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.]

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

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) 最后,您可以使用geom_mapfrom绘制它,ggplot2facet_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)+

在此处输入图像描述

它回答了你的问题吗?

于 2020-02-02T04:09:10.630 回答