在 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 的人工透明额外国家/地区气泡。
有更优雅的解决方案来解决这个问题吗?
Dorling 地图中圆圈的大小是相对的。因此,如果一个数据框中的权重为
c(100, 20)
,而另一个数据框中相同国家的权重为 c(200, 40)
,那么这些应该会生成相同的地图。然而,cartogram_dorling()
还有k
参数:
:由大圆填充的 x 边界框的份额k
默认为
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()