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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:20:39