R语言绘制LULC像素值直方图拥挤、文字重叠等问题如何修复
LULC像素值分布直方图代码调整方案
原有代码与存在问题
原有绘制LULC像素值分布直方图的代码如下:
library(raster) RupandehiLULC19<-raster('C:/Users/lenovo/Desktop/EM/RupandehiLULC2.tif') plot(RupandehiLULC19) hist(RupandehiLULC19, main="Boxplot of LULC By Pixel Value", xlab="Pixel Value", las=1,col=c("green"))
代码运行效果如下:
运行生成的直方图存在三类问题:
- 整体布局拥挤
- 文字重叠:频率数值与坐标轴刻度值互相遮挡
- 最高柱形超出绘图区域范围,对应的频率标签显示不全
注:原代码标题存在笔误,实际绘制的是直方图(Histogram),不是箱线图(Boxplot),调整时可同步修正。
修复代码
通过调整绘图边距、手动设置坐标轴范围、自定义刻度与标签位置即可解决上述问题,调整后完整代码如下:
library(raster) # 读取LULC栅格数据 RupandehiLULC19 <- raster('C:/Users/lenovo/Desktop/EM/RupandehiLULC2.tif') plot(RupandehiLULC19) # 临时调整绘图参数:放大边距预留文字空间,缩小坐标轴刻度字号避免拥挤 par(mar = c(6, 6, 4, 2) + 0.1, cex.axis = 0.9) # 预计算直方图统计值,用于确定y轴范围 hist_stat <- hist(RupandehiLULC19, plot = FALSE) # 正式绘制直方图 hist( RupandehiLULC19, main = "Histogram of LULC By Pixel Value", xlab = "Pixel Value", ylab = "Pixel Count", las = 1, col = "green", # y轴上限设为最大柱高的1.15倍,给顶部标签预留足够显示空间 ylim = c(0, max(hist_stat$counts) * 1.15), # 暂时隐藏自动生成的x轴刻度,后续手动添加避免重叠 xaxt = "n" ) # 手动添加x轴刻度,刻度位置与柱形中心对齐 axis(side = 1, at = hist_stat$mids, labels = hist_stat$mids, padj = 0.6) # 手动添加柱顶的频率数值,调整位置和字号避免遮挡 text( x = hist_stat$mids, y = hist_stat$counts, labels = hist_stat$counts, pos = 3, cex = 0.8, offset = 0.6 ) # 恢复R默认绘图参数,避免影响后续绘图操作 par(mar = c(5, 4, 4, 2) + 0.1, cex.axis = 1, xaxt = "s")
调整说明
- 放大绘图边距后,图表各元素有足够排布空间,解决布局拥挤问题
- 手动设置y轴范围预留冗余空间,最高柱形的顶部标签可完整显示,不会被绘图区边界裁切
- 自定义坐标轴刻度位置、调整文字字号和标签偏移量,彻底解决刻度值与频率标签重叠的问题
内容的提问来源于stack exchange,提问作者Prabhakar
相关产品推荐
相关产品推荐

