在 r 中绘制美国 2D 六边形地图时如何修复六边形失真?

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

我试图在 R 中制作美国的 2D 六边形地图,我遵循了以下指南: https://r-graph-gallery.com/328-hexbin-map-of-the-usa.html 背景:我只能在网上找到一些关于我想做的事情的“操作方法”,上面的链接是我能够用我的数据成功重现的链接;上述指南与其他指南即使不相同,也非常相似。此外,从我发现的其他人的屏幕截图来看,似乎他们最终都遇到了与我相同的扭曲六边形问题,所以我至少知道解决方案并不像尝试我的其他解决方案之一那么简单相反,或者如果这是上述指南中使用的软件包的问题,那么它也会在使用不同软件包但类似流程的其他软件包中呈现为问题(即,https://dges.carleton.ca/CUOSGwiki/ index.php/Creating_Hexbin_Maps_in_R)

无论如何,我“成功”完成了该指南中概述的过程,但是,一些六边形是扭曲的(AK和HI是最明显的,但不是唯一不均匀的)。您可以在我的最终图中看到这一点,我在代码下方包含了最后的链接/图像。现在,如果您查看我使用的指南(以及其他指南,就像我所说的),您会发现他们发布的许多图像中都出现了相同的问题,以说明制作此可视化的不同步骤。我唯一没有看到问题的地方是当我导航到地理数据的原始源时(我找到的所有指南都参考用于此目的: https://team.carto.com/u/andrew/tables/andrew.us_states_hexgrid/public/map,但是我不知道这是否是因为问题不在于文件,因为它们的视图显示的不是静止图像,或者因为它们显示的图像实际上完全是从其他地方提取的。

现在,作为一名研究生,我从 GIS 课程中了解到,投影在地图制作中很重要,当投影不正确时,地图可能会发生扭曲,因为您试图将某些东西变成 3D 并使其平坦,但我不是确定这是否与这里相关有几个原因(即,投影设置在此代码中不可见?)

我可以确认这似乎不是调整 R 中生成的图像大小的结果。起初,我认为这是因为图像在绘制图像和创建指南之间被拉伸(即调整屏幕截图大小),但情况似乎也并非如此。我的结果也是一样(即扭曲)。我认为地图投影方面不是问题的另一个原因是因为我只是想制作尺寸相同的二维六边形,以创建“看起来像”但不按比例代表美国的东西。 [我错了吗?还是投影问题吗?]

任何人都可以帮助我弄清楚如何解决这个问题(或者甚至只是帮助我准确地确定问题出在哪里,如果不是完整的解决方案),以便我可以修复它并使其每个六边形都是统一的?我到处都看到其他人引用相同的形状文件(以及类似但不同的代码将其与他们的数据结合起来),并且在他们的大多数图中,它们也像我的一样倾斜,但不清楚为什么它最终会倾斜,并且没有有人提到了我能找到的任何地方的失真。我只知道我的可视化不会因这种扭曲而获得我所需要的批准。

这是我的代码,我根据前面链接的指南改编了我的数据。 仅供参考,我尝试了文件的 SHP 版本和地理数据的 GEOJSON 版本,这在失真方面没有产生任何影响。


# Load this file. (Note: I stored in a folder called DATA)
my_sf <- read_sf("us_states_hexgrid.geojson")

# Bit of reformatting
my_sf <- my_sf %>%
  mutate(google_name = gsub(" \\(United States\\)", "", google_name))

my_sf <- my_sf %>% rename(State = google_name)


# Show it
plot(st_geometry(my_sf))


ggplot(my_sf) +
  geom_sf(fill = "skyblue", color = "white") +
  geom_sf_text(aes(label = iso3166_2)) +
  theme_void()

# Load MAP data

library(readxl)
state_level_policy_data_for_R_data_viz <- read_excel("state level policy data for R data viz.xlsx")
View(state_level_policy_data_for_R_data_viz)

policy <- state_level_policy_data_for_R_data_viz
remove(state_level_policy_data_for_R_data_viz)

#Perform spatial join 
my_sf2 <- my_sf %>% 
  left_join(. , policy, by=c("State")) 
#Check if the join was successful
view(my_sf2)

library(viridis)
 my_palette <- rev(magma(8))[c(-1, -8)]
  
ggplot(my_sf2) +
 geom_sf(aes(fill = `Overall Category`), linewidth = 0, alpha = 0.9) +
 geom_sf_text(aes(label = iso3166_2), color = "white", size = 3, alpha = 0.6) +
   theme_void() +
    scale_fill_discrete(breaks=c("High", "Medium", "Fair", "Low", "Negative"))```

这是我的情节:(另请参阅指南中的内容)

[hexbin map](https://i.sstatic.net/WuvPpBwX.png)

r dictionary shapefile distortion hexagonal-tiles
1个回答
0
投票

感谢评论里的朋友们提供的答案!我可以确认

my_sf2 <- st_transform(my_sf2, 3857)
确实修复了我的六边形。我跑了那条线,然后我重新绘制了

ggplot(my_sf2) +
 geom_sf(aes(fill = `Overall Category`), linewidth = 0, alpha = 0.9) +
 geom_sf_text(aes(label = iso3166_2), color = "white", size = 3, alpha = 0.6) +
   theme_void() +
    scale_fill_discrete(breaks=c("High", "Medium", "Fair", "Low", "Negative"))```

见下文! :)

unform hexbins

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