我正在try 创建一个图,其中我不使用点来表示数据,而是使用行政边界的轮廓.

下面的代码说明了我所处的位置.只是一个简单的有序散点图.我现在被困住了,试图用每个行政边界(nz_map)的多边形来替换点.因为nz_map中的多边形有自己的几何图形与之关联,所以我不确定如何将它们定位在打印空间中的点的位置.

如有任何建议,我们将不胜感激.

# load packages
library(tidyverse)
library(sf)
library(rnaturalearth)

# map of nz with administrative boundary
nz_map <- ne_states(country  = "new zealand", returnclass = "sf")

# get regions of interest and calculate area
nz_map <- nz_map %>%
  select(name, region) %>%
  filter(region %in% c("South Island", "North Island")) %>%
  mutate(area = as.vector(st_area(.)/1e6))
  

# convert to points to illustrate plotting
nz_map_pnts <- st_centroid(nz_map)

# plot
ggplot() +
  geom_point(data = nz_map_pnts, aes(reorder(name, area), y = area)) +
  labs(x = "Region",
       y = "Area") +
  theme_classic()+
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

enter image description here

推荐答案

一个选项是使用lapplyannotation_custom for each 区域添加 map .为此,我首先在笛卡尔坐标系中创建一个空白图,将names映射到x上,将areas映射到y上.然后使用例如lapply在区域上循环以在所需坐标处添加区域的 map :

library(ggplot2)
library(sf)

nz_map_split <- nz_map |>
  transform(name = reorder(name, area)) |>
  split(~name)

dat <- data.frame(
  name = nz_map$name,
  area = nz_map$area
) |> 
  transform(name = reorder(name, area))

ggplot(dat, aes(name, area)) +
  geom_blank() +
  lapply(
    nz_map_split,
    \(.data) {
      #browser()
      x <- as.numeric(.data$name)
      y <- .data$area
      annotation_custom(
        ggplotGrob(ggplot(.data) +
          geom_sf() +
          theme_void()),
        xmin = x - .5, xmax = x + .5,
        ymin = y - 2000, ymax = y + 2000
      )
    }
  ) +
  labs(
    x = "Region", y = "Area"
  ) +
  theme_classic() +
  theme(
    axis.text.x = element_text(
      angle = 90, vjust = 0.5, hjust = 1
    )
  )

enter image description here

R相关问答推荐

基于R中的GPS点用方向箭头替换点

在边界外添加注释或标题

如何在ggplot 2线性图的每个方面显示每个组的误差条?

用derrr在R中查找组间的重复项

r替换lme S4对象的字符串的一部分

提取具有连续零值的行,如果它们前面有R中的有效值

如何自定义3D散点图的图例顺序?

如何根据嵌套元素的名称高效而优雅地确定它属于哪个列表?

在R中使用Scale_y_Break后更改y轴标签

使用data.table::fcase()而不是dplyr::case_When()时保持值

如何通过ggplot2添加短轴和删除长轴?

在R中创建连续的期间

如何在反曲线图中更改X标签

判断函数未加载R中的库

在生成打印的自定义函数中,可以通过变量将线型或 colored颜色 设置为NULL吗?

使用LAG和dplyr执行计算,以便按行和按组迭代

条形图中的条形图没有try 赋予它们的 colored颜色

把代码写成dplyr中的group_by/摘要更简洁吗?

按顺序将地块添加到列表

根据列和行的不同组合 Select 各种单元格