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

如何在R语言image.plot空间图中添加阴影区域与散点

在R语言image.plot绘制的空间分布图中添加棕色调阴影区域和散点组

我目前用R语言的image.plot函数绘制空间分布图,想在现有图里加上类似示例图的棕色调阴影区域以及散点组。以下是我的现有绘图代码,可提供采样数据,求实现方法。

library(ncdf4)
library(chron)
library(lattice)
library(RColorBrewer)
library(fields) # image.plot
library(maps) # map (to add country borders to map)
library(RColorBrewer)

seas <- c("djf","jja","mam","son")
SEA <- c("DJF","JJA","MAM","SON",
         "DJF","JJA","MAM","SON",
         "DJF","JJA","MAM","SON",
         "DJF","JJA","MAM","SON",
         "DJF","JJA","MAM","SON")

# proj <- "rcp26"
proj <- "rcp85"

# period <- "2021-2050"
period <- "2070-2099"

param <- "tas"
#data dir
path <- paste("E:/plot/RCM/",proj,"/",param,"/",sep="")
setwd(dir=path)
file_all <- list.files(pattern=glob2rx("*70*.nc"))
# model_name <- c("CNRM-ALADIN63","ECEARTH-CCLM","HADGEM-HIRHAM",
#                 "MPI-RACMO","NORESM-REMO")

model_name <- c("CNRM-ALADIN63","CNRM-ALADIN63","CNRM-ALADIN63",
                "CNRM-ALADIN63","ECEARTH-CCLM","ECEARTH-CCLM",
                "ECEARTH-CCLM","ECEARTH-CCLM","HADGEM-HIRHAM","HADGEM-HIRHAM",
                "HADGEM-HIRHAM","HADGEM-HIRHAM","MPI-RACMO","MPI-RACMO",
                "MPI-RACMO","MPI-RACMO","NORESM-REMO","NORESM-REMO",
                "NORESM-REMO","NORESM-REMO")


for (fileno in 1:length(file_all)) {
  ncint <- nc_open(file_all[fileno])
  # Lonlat time ---------------------------------
  # get longitude and latitude
  lon <- ncvar_get(ncint,"lon")
  lat <- ncvar_get(ncint,"lat")
  time <- ncvar_get(ncint,"time")
  # Edit Variable ---------------------------------
  #Define Variables
  tas_array <- ncvar_get(ncint,varid=param)
  # Data show ---------------------------------
  tas_slice <- (tas_array)
  # range(tas_slice,na.rm=T)
  # Plot section ---------------------------------
 # brks <- seq(-5,5,0.5) #tas
  # brks <- seq(-8,8,1) #tasmin
  brks <- seq(0,10,1) #tasmax
  # brks <- seq(-4,12,1) #asymetric
  # length(brks)
  
  colorscale <- colorRampPalette(brewer.pal(11, "OrRd"))(length(brks)-1)
  
  # colorscale <- rev(colorRampPalette(brewer.pal(11, "RdBu"),bias=0.41)(length(brks)-1))
  
# Saving Figures
fig<- paste("E:/plot/RCM/",proj,"/figures/",param,"/change-",param,"-",proj,"-",period,"-",
              SEA[fileno],"-",model_name[fileno],".png",sep="")
  jpeg(file=fig,units="in", width=18, height=10, res=300)
  # windows()
  image.plot(lon,lat,tas_slice,
             col=colorscale,breaks=brks,lab.breaks=brks,
             xaxt="n", yaxt="n", ann=FALSE,horizontal=F)
  map(database="world", add=TRUE)
  # we create customized axes (e.g., labels are added to every 20th degrees)
  axis(side=1, at=seq(-180,177.5,10), labels=seq(-180,177.5,10))
  axis(side=2, at=seq(-80,80,10), labels=seq(-80,80,10), las=3)
  # we add longitudes and latitudes to the map
  # abline(h=seq(-80,80,10), v=seq(-180,177.5,10), lty=2)
  title(main=paste(SEA[fileno],proj,param,model_name[fileno],period,
                   sep=" "),
        line=2,cex.lab=1, cex.axis=1.5, cex.main=2, cex.sub=1.5)
  mtext("degC ", side=4, line=5,cex=1.5)
  graphics.off()
  
}

实现方法

一、添加棕色调阴影区域

棕色调阴影通常用来标记特定研究区域,用polygon()函数即可实现:

  • 先准备目标区域的经纬度边界坐标(可以是简单多边形或复杂的地理边界)
  • 在绘图流程中调用polygon(),通过adjustcolor()设置半透明棕色调,避免遮挡底层的空间分布数据

示例代码片段:

# 替换为你的目标区域实际经纬度坐标
shadow_lon <- c(100, 120, 120, 100)
shadow_lat <- c(20, 20, 40, 40)
# 绘制半透明棕褐色阴影,alpha.f控制透明度(0完全透明,1不透明)
polygon(shadow_lon, shadow_lat, col = adjustcolor("saddlebrown", alpha.f = 0.3), border = NA)

如果需要标记复杂地理区域(比如国家、流域),可以用maps包提取对应区域的坐标,或者用sf包读取矢量边界文件后转换格式绘制。

二、添加散点组

散点用来标记采样点或站点,用points()函数实现:

  • 准备散点的经纬度数据
  • 设置点的形状(pch)、颜色(col)、大小(cex)等参数区分不同组别

示例代码片段:

# 替换为你的实际采样点数据
scatter_data <- data.frame(
  lon = c(105, 110, 115),
  lat = c(25, 30, 35)
)
# 绘制黑色实心散点,大小为2
points(scatter_data$lon, scatter_data$lat, pch = 19, col = "black", cex = 2)
# 若需区分多组,可设置不同样式:
# points(scatter_data$lon[1:2], scatter_data$lat[1:2], pch = 17, col = "red", cex = 2)

整合到现有代码

将上述代码插入到绘图循环中,位置在image.plot()之后:

  • 若想阴影在地图图层下方,放在map()之前;若想阴影覆盖在地图上,放在map()之后
  • 散点一般放在最后绘制,避免被其他图层遮挡

修改后的绘图部分代码:

jpeg(file=fig,units="in", width=18, height=10, res=300)
image.plot(lon,lat,tas_slice,
           col=colorscale,breaks=brks,lab.breaks=brks,
           xaxt="n", yaxt="n", ann=FALSE,horizontal=F)
# 1. 添加棕色调阴影区域
shadow_lon <- c(100, 120, 120, 100)
shadow_lat <- c(20, 20, 40, 40)
polygon(shadow_lon, shadow_lat, col = adjustcolor("saddlebrown", alpha.f = 0.3), border = NA)
map(database="world", add=TRUE)
# 2. 添加散点组
scatter_data <- data.frame(
  lon = c(105, 110, 115),
  lat = c(25, 30, 35)
)
points(scatter_data$lon, scatter_data$lat, pch = 19, col = "black", cex = 2)
# 后续轴、标题设置保持不变
axis(side=1, at=seq(-180,177.5,10), labels=seq(-180,177.5,10))
axis(side=2, at=seq(-80,80,10), labels=seq(-80,80,10), las=3)
title(main=paste(SEA[fileno],proj,param,model_name[fileno],period,
                 sep=" "),
      line=2,cex.lab=1, cex.axis=1.5, cex.main=2, cex.sub=1.5)
mtext("degC ", side=4, line=5,cex=1.5)
graphics.off()

注意事项

  • 必须替换示例中的阴影坐标和散点数据为你的实际目标数据
  • 调整alpha.f参数可以控制阴影的透明度,数值越小越透明
  • 散点的pch参数支持多种形状,比如19是实心圆、17是实心三角
  • 如果是多个不连通的阴影区域,可循环调用polygon()逐个绘制

内容的提问来源于stack exchange,提问作者kettaren ray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:27:02