如何控制R语言栅格绘图右侧色键条(Color Key Bar)的尺寸?
问题:放大R中raster绘图的色键条尺寸
我需要绘制NetCDF文件的等值线图,先将NC文件提取转换为raster格式,当前绘图正常,但希望放大右侧的色键条(Color Key Bar)尺寸。尝试了cex.lab、cex.axis、cex.main等参数无效,求控制方法。
我的R脚本:
lapply(c("ncdf4","raster","sf","Metrics"),require,character.only=TRUE) setwd("~/Desktop/Feb_24") border <- read_sf("India_boundary/India_Boundary.shp") ncfile <- nc_open("monthwise/ACCESS-CM2_historic_monmean.nc") wsp_mod <- ncvar_get(ncfile,varid="sfcWind") pal <- colorRampPalette(c("darkblue","blue","cyan","green","yellow","orange","red")) for(i in seq(1:12)){ r_mon <- raster(wsp_mod[,,i]) r_mon <- t(flip(r_mon,1)) r_mon@extent <- extent(65.125,100.125,3.125,40.125) r_mon <-mask(crop(r_mon,extent(border)),border) r_mon@title <-"Multi year monthly mean" png(filename=paste(i,"_ACCESS-CM2_historic.png"),width=1400,height=1400) par(mar=c(5,6,4,1)+.1) plot(r_mon,xlab="Longitude",ylab="Latitude",main=paste(i),cex.lab=1.3,cex.axis=1.2,cex.main=1.3,col=pal(8),breaks=c(0,1,2,3,4,5,6,7,8)) lines(border,col="black") dev.off() }
解决方案
方法1:利用plot.raster内置参数调整
raster包的plot函数(底层为plot.raster)提供了两个直接控制色键条尺寸的参数:
legend.width:控制色键条的宽度(数值越大,色键条越宽)legend.shrink:控制色键条的整体缩放比例(默认0.9,大于1会放大色键条,小于1则缩小)
修改你的plot语句,添加这两个参数即可:
plot(r_mon, xlab="Longitude",ylab="Latitude",main=paste(i), cex.lab=1.3,cex.axis=1.2,cex.main=1.3, col=pal(8),breaks=c(0,1,2,3,4,5,6,7,8), legend.width = 1.5, # 调宽色键条 legend.shrink = 1.2 # 整体放大色键条 )
同时建议调整par(mar)的右侧边距,避免色键条被截断,比如改为par(mar=c(5,6,4,3)+.1),增加右侧预留空间。
方法2:手动绘制色键条(更灵活)
如果内置参数无法满足精细需求,可以关闭自动图例,手动用fields包的image.plot函数绘制色键条:
- 先安装并加载
fields包(未安装则执行安装命令):
install.packages("fields") library(fields)
- 修改绘图代码:
png(filename=paste(i,"_ACCESS-CM2_historic.png"),width=1400,height=1400) # 调整边距,给右侧色键条预留更多空间 par(mar=c(5,6,4,5)+.1) # 绘图时关闭自动图例 plot(r_mon, xlab="Longitude",ylab="Latitude",main=paste(i), cex.lab=1.3,cex.axis=1.2,cex.main=1.3, col=pal(8),breaks=c(0,1,2,3,4,5,6,7,8), legend = FALSE) lines(border,col="black") # 手动添加色键条,精细控制尺寸和刻度 image.plot(zlim=c(0,8), col=pal(8), breaks=c(0,1,2,3,4,5,6,7,8), legend.only=TRUE, legend.width=2, legend.mar=8, axis.args=list(cex.axis=1.3)) # 同步调整色键条刻度文字大小 dev.off()
这种方式可以自由控制色键条的位置、宽度、刻度样式等细节。
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

