Anonymous
Использование расширения цветовой карты на графике общего снегопада
Сообщение
Anonymous » 06 янв 2025, 23:20
Я создал карту снегопада, которую хотел, с заданными интервалами, но последний цвет в моей цветовой карте с использованием расширения = 'max' совпадает с предпоследним цветом. Я хочу, чтобы последний цвет в моем графике/карте цветов соответствовал последнему цвету моей карты цветов, а не предпоследнему цвету.
Я попробовал метод vmax и функцию cmap.set_over, но безуспешно. Что мне делать?
Код: Выделить всё
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
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)
snowm = gaussian_filter(snow, sigma=3.0)
snowin = snowm*39.37
nws_snowfall_colors = [
"#ffffff",# 0 inches (white)
"#daeef5",
"#bdd7e7", # 0.1 inches
"#6baed6", # 1 inch
"#3182bd", # 1-2 inches
"#08519c", # 2-3 inches
"#082694", # 3-4 inches
"#ffff96", # 6-8 inches
"#ffc400", # 8-12 inches
"#ff8700", # 12-18 inches
"#db1400", # 18-24 inches
"#9e0000", # 24-30 inches
"#690000", # 30-36 inches
"#360000", # > 36 inches
]
# Define the corresponding snowfall values (in inches)
nws_snowfall_cmap = mcolors.ListedColormap(nws_snowfall_colors)
nws_snowfall_cmap
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,42,6)))
norm = mcolors.BoundaryNorm(clev_snowfall, 14)
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, vmin = 0, vmax=42.0, extend='max', transform=datacrs)
cb = plt.colorbar(cf, orientation='horizontal', ticks = [0, .1, 1, 2, 3, 4, 6, 8, 12, 18, 24, 30, 36])
Цветовая карта
Построение графика после выполнения кода
Подробнее здесь:
https://stackoverflow.com/questions/793 ... wfall-plot
1736194806
Anonymous
Я создал карту снегопада, которую хотел, с заданными интервалами, но последний цвет в моей цветовой карте с использованием расширения = 'max' совпадает с предпоследним цветом. Я хочу, чтобы последний цвет в моем графике/карте цветов соответствовал последнему цвету моей карты цветов, а не предпоследнему цвету. Я попробовал метод vmax и функцию cmap.set_over, но безуспешно. Что мне делать? [code]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 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) snowm = gaussian_filter(snow, sigma=3.0) snowin = snowm*39.37 nws_snowfall_colors = [ "#ffffff",# 0 inches (white) "#daeef5", "#bdd7e7", # 0.1 inches "#6baed6", # 1 inch "#3182bd", # 1-2 inches "#08519c", # 2-3 inches "#082694", # 3-4 inches "#ffff96", # 6-8 inches "#ffc400", # 8-12 inches "#ff8700", # 12-18 inches "#db1400", # 18-24 inches "#9e0000", # 24-30 inches "#690000", # 30-36 inches "#360000", # > 36 inches ] # Define the corresponding snowfall values (in inches) nws_snowfall_cmap = mcolors.ListedColormap(nws_snowfall_colors) nws_snowfall_cmap 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,42,6))) norm = mcolors.BoundaryNorm(clev_snowfall, 14) 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, vmin = 0, vmax=42.0, extend='max', transform=datacrs) cb = plt.colorbar(cf, orientation='horizontal', ticks = [0, .1, 1, 2, 3, 4, 6, 8, 12, 18, 24, 30, 36]) [/code] Цветовая карта Построение графика после выполнения кода Подробнее здесь: [url]https://stackoverflow.com/questions/79334223/use-of-extend-from-a-colormap-in-a-total-snowfall-plot[/url]