在 R 中按州创建一个州地图以显示按州划分的调查响应数量,我正在使用 tidyverse,我的地图确实显示,但形状很奇怪

问题描述 投票:0回答:1

我正在使用以下代码,但我没有获得变量“Group”或“Group2”的州级密度图,而是获得了美国地图,其中嵌入了各种奇怪的角度和三角形交叉州线。

library(tidyverse)
theme_set(theme_bw(base_size = 16))

install.packages("foreign")
library("foreign")

data1 <- read.spss("C:/afp/density2.sav", to.data.frame = TRUE)

head(data1)
state_initial                    states Group Group2 Sum2023
1            AL alabama                     2.1      1       3
2            AK alaska                      0.0      0       0
3            AZ arizona                     1.0      3       6
4            AR arkansas                    4.0      3       2
5            CA california                  1.0     20      15
6            CO colorado                    6.0      4       5

us_states <- map_data("state")

us_states %>%
  left_join(data1, by = c("region" = "states")) %>%
  ggplot(aes(x = long, y = lat, group = Group, fill = Group)) +
  geom_polygon(color = "gray90", size = 0.1) +
  coord_map(projection = "albers", lat0 = 45, lat1 = 55) +
  scale_fill_continuous(type = "gradient") +
  theme(
    legend.position = "right",
    axis.line = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    axis.title = element_blank(),
    panel.background = element_blank(),
    panel.border = element_blank(),
    panel.grid = element_blank()
  )

enter image description here

r ggplot2 maps
1个回答
0
投票

正如我在评论中提到的,问题是您将数据集中的

Group
列映射到
group
aes 上,而不是数据映射中的
group
列:

state_initial <- c("AL", "AK", "AZ", "AR", "CA", "CO")
states <- c("alabama", "alaska", "arizona", "arkansas", "california", "colorado")
Group <- c(2.1, 0.0, 1.0, 4.0, 1.0, 6.0)
Group2 <- c(1, 0, 3, 3, 20, 4)
Sum2023 <- c(3, 0, 6, 2, 15, 5)

data1 <- data.frame(state_initial, states, Group, Group2, Sum2023)

library(tidyverse)

us_states <- map_data("state")

us_states %>%
  left_join(data1, by = c("region" = "states")) %>%
  ggplot(aes(x = long, y = lat, group = group, fill = Group)) +
  geom_polygon(color = "gray90", size = 0.1) +
  coord_map(projection = "albers", lat0 = 45, lat1 = 55) +
  scale_fill_continuous(type = "gradient") +
  theme(
    legend.position = "right",
    axis.line = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    axis.title = element_blank(),
    panel.background = element_blank(),
    panel.border = element_blank(),
    panel.grid = element_blank()
  )
#> Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
#> ℹ Please use `linewidth` instead.
#> This warning is displayed once every 8 hours.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
#> generated.

© www.soinside.com 2019 - 2024. All rights reserved.