You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot2绘图网格单元面积查询及自定义设置求助

问题解答:ggplot2绘制树冠图的网格单元面积设置

一、当前网格单元的面积确认

你图中的网格是sf数据自带坐标系的默认网格,并非ggplot2生成,要确定面积需先查看数据的坐标系(CRS):

  • 运行st_crs(crowns4_crop)查看信息:如果是UTM这类投影坐标系(单位为米),可通过网格边长计算面积,比如100m×100m的网格对应1公顷;如果是WGS84这类地理坐标系(单位为度),网格面积随纬度变化,需先转换为投影坐标系再计算。

二、设置特定面积的网格单元(1公顷/0.5公顷/0.1公顷)

需要手动生成对应面积的网格后叠加到图中,步骤如下:

1. 计算目标网格的边长(基于投影坐标系,单位米)

  • 1公顷=10000㎡ → 正方形边长100m
  • 0.5公顷=5000㎡ → 正方形边长≈70.71m
  • 0.1公顷=1000㎡ → 正方形边长≈31.62m

2. 生成对应网格的代码示例

假设数据已为UTM投影(单位米),用sf包的st_make_grid生成网格:

# 获取数据边界范围
bbox <- st_bbox(crowns4_crop)
# 生成1公顷网格(100m边长)
grid_1ha <- st_make_grid(bbox, cellsize = 100, square = TRUE) %>% 
  st_sf()
# 生成0.5公顷网格(约70.71m边长)
grid_0.5ha <- st_make_grid(bbox, cellsize = sqrt(5000), square = TRUE) %>% 
  st_sf()
# 生成0.1公顷网格(约31.62m边长)
grid_0.1ha <- st_make_grid(bbox, cellsize = sqrt(1000), square = TRUE) %>% 
  st_sf()

3. 将网格叠加到ggplot图中

以叠加1公顷网格为例,修改原代码:

ggplot() +
  geom_sf(data = crowns4_crop, aes(fill = convhull_area)) +
  scale_fill_viridis_c(name = "Crown area (m²)") + 
  # 添加1公顷网格,设置线条样式
  geom_sf(data = grid_1ha, color = "gray", linetype = "dashed", fill = NA) +
  geom_sf(data = ttops4_crop, color = "red", pch = 3, size = 2, show.legend = FALSE)  + 
  theme(axis.text = element_blank(),
        axis.title = element_blank(),
        axis.ticks = element_blank(),
        plot.title = element_text(hjust = 0.5)) + 
  labs(title = "Crown & Tree (1公顷网格)")

注意事项

  • 若数据为地理坐标系(单位度),需先转换为投影坐标系,比如加拿大北方林区可选用对应UTM分带(如UTM Zone 10N,CRS代码32610):
crowns4_crop_proj <- st_transform(crowns4_crop, crs = 32610)
ttops4_crop_proj <- st_transform(ttops4_crop, crs = 32610)
  • 若需矩形网格,可给cellsize传入长度为2的向量,比如cellsize = c(100, 50)即生成100m×50m的矩形网格。

内容的提问来源于stack exchange,提问作者Léa HELLEGOUARCH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:12:13