Построение числовых значений на картах США - PullRequest
2 голосов
/ 02 февраля 2020

Мои данные следующие, я называю это коротким ie в коде:

   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")

Я либо получаю пустые карты, либо просто пустые экраны с этим. Я попытался определить «минимум» как сокращение [2: 2], потому что иногда я получал ошибку, что Мин не был найден как столбец в данных.

Этот код выполняется, но, как вы можете видеть, он очень длинный, и по какой-то причине он не имеет значения для Флориды и не запускается, если я включаю Аляску и Гавайи. Код ниже без Аляски и Гавайев. Также я хотел узнать, какие еще существуют альтернативные способы представления числа 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)))

Ответы [ 2 ]

2 голосов
/ 02 февраля 2020

Если вы используете sh для использования 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")

map with plot_usmap

Если вы хотите построить Max, используйте shortie[,c(2,4)] и values = "Max". Если вы хотите построить Average, используйте shortie[,c(2,5)] и values = "Average".

0 голосов
/ 02 февраля 2020

На основе вашего фрейма данных вы можете сделать следующее:

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) вы можете объединить свои значения с этим фреймом данных "DF", используя сокращенные имена состояний (здесь используя left_join от * 1008) * package) и преобразуйте ваш фрейм данных в более длинный формат, чтобы создать категориальные значения для каждой переменной (Max, Min, Average) (здесь используется pivot_longer из tidyr пакета):

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_map из ggplot2 и использовать 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)+

enter image description here

Это отвечает на ваш вопрос?

...