如何获取R语言中grid()绘制网格的单元格中心坐标?
获取R绘图中grid()网格单元格的中心坐标
要获取grid()生成的网格每个单元格的中心坐标,核心思路是基于当前绘图的轴刻度来计算——因为grid()的网格线就是对齐轴刻度的。下面是具体的实现步骤:
- 首先获取当前绘图的x轴和y轴实际显示的刻度值
- 计算相邻刻度的中点,得到每个网格单元格在x和y方向的中心位置
- 组合x和y方向的中心,得到所有网格单元格的坐标对
完整代码示例
# 先运行你的绘图代码(确保绘图区域和网格已生成) plot(rb22, xlim=c(4027200,4030200), ylim=c(697500,700100)) grid() # 获取x、y轴的刻度值 x_ticks <- axTicks(1) y_ticks <- axTicks(2) # 计算x方向的单元格中心:相邻刻度的平均值 x_centers <- (x_ticks[-1] + x_ticks[-length(x_ticks)]) / 2 # 计算y方向的单元格中心 y_centers <- (y_ticks[-1] + y_ticks[-length(y_ticks)]) / 2 # 生成所有网格中心的坐标组合(笛卡尔积) grid_centers <- expand.grid(x = x_centers, y = y_centers) # 查看结果 print(grid_centers)
验证方法
如果你想确认这些坐标是否正确,可以把中心坐标点到图上:
points(grid_centers$x, grid_centers$y, col="red", pch=16, cex=0.8)
运行后会看到红色小点精准落在每个网格单元格的中心,说明计算正确。
补充说明
axTicks(1)和axTicks(2)会直接返回当前绘图区域实际显示的轴刻度值,比手动从par("xaxp")计算更直观。如果你想用par()的方式获取刻度,代码如下:
x_info <- par("xaxp") x_ticks <- seq(x_info[1], x_info[2], length.out = x_info[3] + 1)
结果和axTicks(1)完全一致。
内容的提问来源于stack exchange,提问作者Purna Gamage
相关产品推荐
相关产品推荐

