указать непрозрачный цвет для отсутствующих данных в карте Cartopy - PullRequest
0 голосов
/ 20 февраля 2020

У меня проблемы с указанием цвета для пропущенных значений при использовании Cartopy с ppolmeme 101p * для matplotlib для создания карты. Я бы хотел, чтобы все значения "nan" были, скажем, серыми, а не белыми / прозрачными. Для этого я попытался использовать set_bad метод цветовых карт matplotlib, но это, похоже, нарушает Cartopy. Проблема вызывает предупреждение пользователя от Cartopy, но я не знаю, что такое обходной путь.

Вот пример, который даже не имеет значений nan, но показывает проблему:

import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import matplotlib as mpl
import cartopy
import sys
print(f"PYTHON: {sys.version}")  # PYTHON: 3.8.1 | packaged by conda-forge | (default, Jan 29 2020, 15:06:10) [Clang 9.0.1 ]
print(f" xarray {xr.__version__}")  # xarray 0.14.1
print(f" numpy {np.__version__}")  # numpy 1.17.3
print(f" matplotlib {mpl.__version__}")  # matplotlib 3.1.2
print(f" cartopy {cartopy.__version__}")  # cartopy 0.17.0

# construct fake data:
sig = np.sin(np.radians(np.linspace(-90, 90, 192)))
sig = np.tile(sig, [288,1]).T
darr = xr.DataArray(sig, dims=("lat", "lon"), coords={"lat":np.linspace(-90, 90, 192), "lon":np.linspace(0,360,288)})
# darr.plot.pcolormesh()  # Looks fine.

# fig, ax = plt.subplots(subplot_kw={"projection":ccrs.PlateCarree()})
# lons, lats = np.meshgrid(darr['lon'], darr['lat'])
# ax.pcolormesh(lons, lats, darr, transform=ccrs.PlateCarree())  # Looks fine.

cm = plt.get_cmap("viridis")
cm.set_bad("gray")

fig, ax = plt.subplots(subplot_kw={"projection":ccrs.PlateCarree()})
lons, lats = np.meshgrid(darr['lon'], darr['lat'])
ax.pcolormesh(lons, lats, darr, transform=ccrs.PlateCarree())  # Right side of map is gray / userwarning triggered

Userwarning: «UserWarning:« плохая »цветовая карта была установлена, но для переноса pcolorme sh по всей карте она должна быть полностью прозрачной.»

Таким образом, предупреждение ясно, и Результатом является карта с половиной скрытых данных. Мой вопрос заключается в том, как обойти это ограничение Cartopy?

1 Ответ

0 голосов
/ 18 марта 2020

Попробуйте проблемную строку кода

cm.set_bad("gray")

с помощью

cm.set_bad( "gray", alpha=0 )

альфа-параметр, представляющий «полностью прозрачный», должен решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...