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

使用Python cartopy绘制地图时如何调整contourf影线的疏密程度

解决方案

核心方法:调整matplotlib影线专属配置参数

不需要缩放画布,直接通过matplotlib的影线专属参数调整密度和线宽,不会影响文本、海岸线等其他元素的样式。

方法1:全局设置(所有影线统一生效)

在绘图代码开头加入如下配置,核心是hatch.density参数,数值越大影线越密集,默认值为1:

import matplotlib as mpl
# 调整影线密度,数值越大越密,可根据需求调整
mpl.rcParams['hatch.density'] = 6
# 可选:调整影线本身的粗细,数值越小线越细
mpl.rcParams['hatch.linewidth'] = 0.4

你的代码加入上述配置后,不需要修改画布尺寸即可得到高密度的影线效果。

方法2:仅调整当前显著性区域的影线(不影响其他绘图元素)

如果不想修改全局配置,可以单独获取contourf返回的集合对象,针对性设置属性:

# 把绘制显著性影线的contourf返回值赋值给变量
cf_sig = ax.contourf(
    lons, lats, data > data.mean(),
    transform=ccrs.PlateCarree(),
    colors='none',
    levels=[.5, 1.5],
    hatches='///',
)
# 单独修改这组影线的属性
for col in cf_sig.collections:
    col.set_hatch_density(6)
    col.set_hatch_linewidth(0.4)

低版本matplotlib兼容方法

如果你的matplotlib版本低于3.3,不支持hatch.density参数,可以通过重复影线符号的方式提升密度,比如把hatches='///'改成hatches='////////////////////',重复的字符越多,影线越密。

完整可运行示例

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import cartopy.crs as ccrs

# 调整影线参数
mpl.rcParams['hatch.density'] = 6
mpl.rcParams['hatch.linewidth'] = 0.4

lats = np.arange(-90, 91, 10)
lons = np.arange(-180, 181, 20)
data = np.sin(np.arange(len(lats)*len(lons))).reshape(len(lats), len(lons))

proj = ccrs.Robinson()
fig, ax = plt.subplots(figsize=(6, 7), subplot_kw={'projection': proj})
im = ax.contourf(
    lons, lats, data,
    transform=ccrs.PlateCarree(),
)
ax.contourf(
    lons, lats, data > data.mean(),
    transform=ccrs.PlateCarree(),
    colors='none',
    levels=[.5, 1.5],
    hatches='///',
)

ax.coastlines()
ax.set_global()
cbar = fig.colorbar(im, ax=ax, location='bottom')
# 保存图片时设置高dpi可避免影线显示模糊
# plt.savefig('sig_map.png', dpi=300, bbox_inches='tight')
plt.show()

补充说明

你之前通过缩放画布调整影线密度的方法不可行,是因为matplotlib的所有元素尺寸(字体大小、线宽等)都是基于英寸单位设置的,画布放大后所有元素都会等比例缩放,导致样式异常。使用上述影线专属参数调整的方法,完全不会影响其他元素的样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:36:03