R语言maps包中map.scale函数的颜色设置问题
解决maps包map.scale线条无法变红的问题
方法一:临时修改全局绘图参数
maps包的map.scale函数绘制线条时会使用当前绘图环境的fg颜色(默认黑色),col参数仅控制文字颜色。可以通过临时修改par(fg)统一设置线条和文字颜色:
library(rnaturalearth) library(terra) library(maps) world <- vect(ne_countries(scale = "medium", returnclass = "sf")) plot(world) # 保存当前fg参数,临时改为红色 old_fg <- par("fg") par(fg = "red") map.scale(38, -20.7, relwidth = 0.15, ratio = F, cex = 0.8, metric = TRUE) # 恢复原fg参数 par(fg = old_fg)
方法二:改用terra包的scalebar函数(推荐)
terra包的scalebar函数支持单独控制线条和文字颜色,无需修改全局参数,更灵活:
library(rnaturalearth) library(terra) world <- vect(ne_countries(scale = "medium", returnclass = "sf")) plot(world) # 使用terra::scalebar,直接设置线条和文字颜色 scalebar(38, -20.7, length = 1000, # length单位为公里,需根据地图范围调整 cex = 0.8, col = "red", border = "red")
方法三:自定义绘制比例尺(进阶)
如果需要完全自定义样式,可用基础绘图函数手动绘制:
library(rnaturalearth) library(terra) world <- vect(ne_countries(scale = "medium", returnclass = "sf")) plot(world) # 定义比例尺位置和长度(1000公里) x_start <- 38 y_start <- -20.7 scale_length_km <- 1000 # 经纬度投影下,1度≈111公里,转换为地图坐标单位 scale_x_deg <- scale_length_km / 111 # 绘制比例尺线条 lines(c(x_start, x_start + scale_x_deg), c(y_start, y_start), col = "red", lwd = 2) lines(c(x_start, x_start), c(y_start - 0.2, y_start + 0.2), col = "red") lines(c(x_start + scale_x_deg, x_start + scale_x_deg), c(y_start - 0.2, y_start + 0.2), col = "red") lines(c(x_start + scale_x_deg/2, x_start + scale_x_deg/2), c(y_start - 0.1, y_start + 0.1), col = "red") # 添加文字标注 text(x_start + scale_x_deg/2, y_start - 0.5, "1000 km", col = "red", cex = 0.8)
内容的提问来源于stack exchange,提问作者perep1972
相关产品推荐
相关产品推荐

