R 中的多林制图:抑制标准化?

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

在 R 中,我正在创建不同版本的地图,使用相同的国家/地区但不同的权重因子值。 在我的示例中,我创建了两个图表,其中第二个图表的权重是第一个图表的两倍。令人惊讶的是,在生成的两个图表中,每个国家的气泡大小完全相同。也就是说,cartogram_dorling 中似乎存在一些气泡大小的标准化。 当然,我可以在图例中指出不同的最大尺寸,但我期待两个制图,其中气泡在视觉上是彼此大小的一半。

这是一个相当简单的代码示例:

library(sf)
library(cartogram)
library(ggplot2)
library(rnaturalearth)
library(rnaturalearthdata)
library(dplyr)  

world <- ne_countries(scale = "medium", returnclass = "sf")
world <- st_transform(world, crs = 3395)

# First cartogram: (100, 20) scenario
weights_1 <- data.frame(
  country = c("Germany", "France"),
  weight = c(100, 20)
)
world_weights_1 <- world %>%
  filter(admin %in% c("Germany", "France")) %>%
  left_join(weights_1, by = c("admin" = "country"))
cartogram_1 <- cartogram_dorling(world_weights_1, weight = "weight")

p1 <- ggplot(cartogram_1) +
  geom_sf(aes(size = weight), color = "black") +
  theme_minimal() 
ggsave("cartogram_1.png", plot = p1, width = 8, height = 6, dpi = 300)

# Second cartogram: (200, 40) scenario
weights_2 <- data.frame(
  country = c("Germany", "France"),
  weight = c(200, 40)
)
world_weights_2 <- world %>%
  filter(admin %in% c("Germany", "France")) %>%
  left_join(weights_2, by = c("admin" = "country"))
cartogram_2 <- cartogram_dorling(world_weights_2, weight = "weight")

p2 <- ggplot(cartogram_2) +
  geom_sf(aes(size = weight), color = "black") +
  theme_minimal() 
ggsave("cartogram_2.png", plot = p2, width = 8, height = 6, dpi = 300)

第一个地图 第二张图表

我还没有找到一种方法来正确抑制标准化并使第一个图表中的国家/地区气泡看起来只有第二个图表中的一半大。 我只找到了一个肮脏的解决方法,即在第一个图表中添加一个大小为 200 的人工透明额外国家/地区气泡。

有更优雅的解决方案来解决这个问题吗?

r ggplot2 cartogram
1个回答
0
投票

Dorling 地图中圆圈的大小是相对的。因此,如果一个数据框中的权重为

c(100, 20)
,而另一个数据框中相同国家的权重为
c(200, 40)
,那么这些应该会生成相同的地图。然而,
cartogram_dorling()
还有
k
参数:

k
:由大圆填充的 x 边界框的份额

默认为

5
。您可以调整它以获得所需的圆圈大小:

k_values <- c(1, 2.5, 5, 10)
lapply(
    k_values,
    \(k) cartogram_dorling(world_weights_1, weight = "weight", k = k) |>
        ggplot() +
        geom_sf(aes(size = weight), color = "black") +
        theme_minimal() +
        labs(title = sprintf("K = %s", k))
) |>
    patchwork::wrap_plots()

enter image description here

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