Отображение значений, соответствующих штатам США, над названием штата - PullRequest
3 голосов
/ 06 мая 2020

Я пытался создать карту штатов США, используя пакет choroplethr и простой набор данных df2 (он имеет тот же регион и столбец значений), и я использовал код, предоставленный в документе пакета.

require (choroplethr)

data("df_pop_state")

df2 <- read.csv("ShareDF-chro.csv", header=TRUE, stringsAsFactors=FALSE)



# here is the data ShareDF-chro

region = c("alabama", "alaska", "arizona", "arkansas", 
"california", "colorado", "connecticut", "delaware", "district of columbia", 
"florida", "georgia", "hawaii", "idaho", "illinois", "indiana", 
"iowa", "kansas", "kentucky", "louisiana", "maine", "maryland", 
"massachusetts", "michigan", "minnesota", "mississippi", "missouri", 
"montana", "nebraska", "nevada", "new hampshire", "new jersey", 
"new mexico", "new york", "north carolina", "north dakota", "ohio", 
"oklahoma", "oregon", "pennsylvania", "rhode island", "south carolina", 
"south dakota", "tennessee", "texas", "utah", "vermont", "virginia", 
"washington", "west virginia", "wisconsin", "wyoming"), 

value = c(1.15, 0.11, 6.21, 2.41, 8.42, 13.57, 3.57, 4.55, 7.08, 9.42, 5.21, 
0.108, 9.09, 2.56, 4.51, 9.65, 6.76, 3.54, 0.17, 1.99, 6.66, 
3.88, 7.31, 4.86, 4.85, 2.39, 0.25, 0.05, 0.21, 0.11, 3.86, 0.05, 
7.31, 1.91, 0.41, 4.55, 0.002, 2.65, 3.14, 0.71, 1.94, 0.13, 
2.2, 12.65, 0.05, 0.074, 5.79, 7.5, 0.12, 2.6, 0.33)

df_pop_state$value <- df2$value

state_choropleth(df_pop_state,title = "US State's X-Capital share data",num_colors = 2,legend = "Capital Share")

enter image description here

Мой вопрос: как я могу вставить соответствующие значения доли X-capital на карту вместе с акронимами штата (в то время как чтобы размер шрифта аббревиатуры был немного меньше). Спасибо, и я ценю вашу помощь.

1 Ответ

2 голосов
/ 06 мая 2020

Вот решение как раз с ggplot2.

  • Получить данные многоугольника с помощью usmap::us_map. (как и вы)
  • Левое соединение с вашими общими данными (сначала заглавные буквы в именах регионов)
  • Создайте центроиды для текстовой аннотации .
  • Эти центроиды и общий ресурс лучше всего помещать в отдельный фрейм данных
  • Нарисуйте многоугольники с помощью geom_polygon
  • Нарисуйте свои метки (аббревиатуры штата и доли) с помощью geom_text , используя paste. (вы также можете использовать annotate)
  • Передайте данные отдельно на каждый слой. (Главный вызов пустой ggplot)

Преимущество заключается в том, что использование синтаксиса ggplot делает управление цветом / заливкой c очень простым, и вы также можете очень легко настроить толщину линии и размер текста.

Что касается аббревиатур штатов, я использовал только первые буквы - возможно, это не официальная аббревиатура. Наверняка существует какой-то вектор, как это легко преобразовать.

library(usmap)
library(tidyverse)

us <- usmap::us_map()

region <- str_to_title(region)

share_df <- data.frame(region, share)

us_val <- 
  left_join(us, share_df, by = c("full" ="region")) 
#> Warning: Column `full`/`region` joining character vector and factor, coercing
#> into character vector

us_centroids <- 
  us_val %>%
  group_by(full) %>% 
  summarise(centroid.x = mean(range(x)), 
            centroid.y = mean(range(y)),
            label = unique(toupper(str_sub(full,1,2))),
            share = unique(share))

ggplot() + 
  geom_polygon(data = us_val, 
               aes(x,y, group = group, fill = share > 3), 
               color = "black",
               size = .1) +
  geom_text(data = us_centroids, 
            aes(centroid.x, centroid.y, label = paste(label, "\n", share)),
            size = 5/14*8) +
  scale_fill_brewer(name = "State Share", 
                    palette = "Blues", 
                    labels = c(`TRUE`="More than 3",`FALSE`="Less than 3")) +
  theme_void()

Создано 06.05.2020 пакетом REPEX (v0.3.0)

update Сказав, что с сокращением - проверьте? Datasets :: state. Он содержит эти сокращения (state.abb) и названия состояний (state.name). Он также содержит данные о центроидах (state.center). Итак, много данных уже встроено :)

Data

region =  c("alabama", "alaska", "arizona", "arkansas", 
           "california", "colorado", "connecticut", "delaware", "district of columbia", 
           "florida", "georgia", "hawaii", "idaho", "illinois", "indiana", 
           "iowa", "kansas", "kentucky", "louisiana", "maine", "maryland", 
           "massachusetts", "michigan", "minnesota", "mississippi", "missouri", 
           "montana", "nebraska", "nevada", "new hampshire", "new jersey", 
           "new mexico", "new york", "north carolina", "north dakota", "ohio", 
           "oklahoma", "oregon", "pennsylvania", "rhode island", "south carolina", 
           "south dakota", "tennessee", "texas", "utah", "vermont", "virginia", 
           "washington", "west virginia", "wisconsin", "wyoming")

share = c(1.15, 0.11, 6.21, 2.41, 8.42, 13.57, 3.57, 4.55, 7.08, 9.42, 5.21, 
          0.108, 9.09, 2.56, 4.51, 9.65, 6.76, 3.54, 0.17, 1.99, 6.66, 
          3.88, 7.31, 4.86, 4.85, 2.39, 0.25, 0.05, 0.21, 0.11, 3.86, 0.05, 
          7.31, 1.91, 0.41, 4.55, 0.002, 2.65, 3.14, 0.71, 1.94, 0.13, 
          2.2, 12.65, 0.05, 0.074, 5.79, 7.5, 0.12, 2.6, 0.33)
...