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

Metpy绘制降雪分析图时的colorbar显示异常问题求助

Metpy绘制降雪分析图时的colorbar显示异常问题求助

我制作的降雪分析可视化图本身看起来没啥问题,但在绘制色条(colorbar)的时候遇到了两个奇怪的问题:

  • 色条莫名跳过了倒数第二个颜色
  • 用extend='max'参数后,色条的最后两个区间都只显示了配色表的最后一种颜色

我试过用cmap.set_over方法来调整,但结果还是没变化。

数据集说明

使用的是NOAA NOHRSC发布的2025年1月6日12时的48小时美国本土降雪数据集。

代码实现

from datetime import datetime

import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
import xarray as xr
import numpy as np
import metpy.calc as mpcalc
import netCDF4
from netCDF4 import Dataset
from metpy.units import units
from scipy.ndimage import gaussian_filter
import scipy.ndimage as ndimage
import matplotlib.colors as mcolors
from metpy.plots import USCOUNTIES
from herbie import Herbie, paint
from herbie.toolbox import EasyMap, pc

snowdata = xr.open_dataset('sfav2_CONUS_48h_2025010612.nc')


lat = snowdata['lat'][:].squeeze()
lon = snowdata['lon'][:].squeeze()
snow = snowdata['Data'][:].squeeze()
lon_2d, lat_2d = np.meshgrid(lon, lat)

snowin = snow*39.37

nws_snowfall_colors = [
        "#ffffff",# 0 inches (white)
        "#daeef5", # 0.1 inches
         "#bdd7e7", # 1 inch
         "#6baed6", # 2 inches
         "#08519c", # 3 inches
         "#082694", # 4 inches
         "#ffff96", # 6 inches
         "#ffc400", # 8 inches
         "#ff8700", # 12 inches
        "#db1400", # 18 inches
        "#9e0000", # 24 inches
        "#690000", # 30 inches
         "#360000", # 36 inches
 ]
       # Define the corresponding snowfall values (in inches)
nws_snowfall_cmap = mcolors.ListedColormap(nws_snowfall_colors)

clev_snowfall =  np.concatenate((np.arange(0, .1, .1), np.arange(.1, 1, .9), np.arange(1, 4, 1), np.arange(4, 8, 2), np.arange(8,12,4), np.arange(12,18,6), np.arange(18,24,6), np.arange(24,30,6), np.arange(30,36,6), np.arange(36,42,6)))
norm = mcolors.BoundaryNorm(clev_snowfall, 13)
#nws_snowfall_cmap.set_under("#ffffff")
#nws_snowfall_cmap.set_over("#360000")

datacrs = ccrs.PlateCarree()
plotcrs = ccrs.LambertConformal(central_latitude=35, central_longitude=-100,standard_parallels=(30, 60))
bounds = ([-110, -85, 33, 43])
fig = plt.figure(figsize=(14,12))
ax = fig.add_subplot(1,1,1, projection=plotcrs)
ax.set_extent(bounds, crs=ccrs.PlateCarree())
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth = 0.75)
ax.add_feature(cfeature.STATES, linewidth = 2)
ax.add_feature(USCOUNTIES, edgecolor='black', linewidth = 1)
cf = ax.contourf(lon_2d, lat_2d, snowin, clev_snowfall, cmap = nws_snowfall_cmap, norm=norm, extend='max', transform=datacrs)
cb = plt.colorbar(cf, orientation='horizontal', ticks = [0, .1, 1, 2, 3, 4, 6, 8, 12, 18, 24, 30, 36])

效果展示

  • 异常的色条:
    异常colorbar
  • 降雪分析图:
    降雪分析图

备注:内容来源于stack exchange,提问作者Matthew Labenz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:39:53