3

我试图使用包“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")

在此处输入图像描述

我的问题是:如何在地图中插入相应的 X-capital 份额值以及州的首字母缩写词(同时希望保持首字母缩写词的字体更小)。谢谢,我很感激你的帮助。

4

1 回答 1

2

这里有一个解决方案ggplot2

  • 使用 获取多边形数据usmap::us_map。(就像你做的那样)
  • 与您的共享数据左连接(首先大写您的区域名称)
  • 为文本注释创建质心
  • 这些质心和份额最好放在单独的数据框中
  • 绘制多边形geom_polygon
  • 使用粘贴绘制标签(州缩写和共享)geom_text。(您也可以使用annotate
  • 将数据分别传递给每一层。(空 ggplot 主调用)

优点是使用 ggplot 语法使得颜色/填充美学的控制非常容易,您还可以非常轻松地自定义线条粗细和文本大小。

至于州的缩写,我只用了第一个字母——这可能不是官方的缩写。肯定有一些向量可以轻松转换它。

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

reprex 包(v0.3.0)于 2020-05-06 创建

更新 已经说过缩写 - 签出?datasets::state。它包含那些缩写 ( state.abb) 和州名 ( state.name)。它还包含质心 ( state.center) 上的数据。所以,很多数据已经内置了:)

数据

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)
于 2020-05-06T09:17:09.987 回答