Как мне отобразить 2 переменные на одной карте с помощью одной палитры с картопией?

#python #netcdf #cartopy

#python #netcdf #картопия

Вопрос:

Я застрял здесь. Мой код:

 import os
import matplotlib.pyplot as plt
from netCDF4 import Dataset as netcdf_dataset
import numpy as np

from cartopy import config
import cartopy.crs as ccrs

fname = os.path.join("path", "file")
dataset = netcdf_dataset(fname)

lats = dataset.variables['lat'][:]
lons = dataset.variables['lon'][:]
IVT = dataset.variables['IVT'][0,:,:]
IVTm = dataset.variables['IVTm'][0,:,:]


ax = plt.axes(projection=ccrs.PlateCarree())

map_ivt=ax.contourf(lons, lats, IVT, 60,
             transform=ccrs.PlateCarree())
map_ivt=ax.contourf(lons, lats, IVTm, 60,
             transform=ccrs.PlateCarree())

plt.colorbar(map_ivt, orientation='horizontal')

ax.coastlines()
ax.gridlines()

plt.show()


  

Это мой результат (я думаю, что моя палитра не показывает правильное значение, обе переменные имеют значения более 800):

введите описание изображения здесь

Не удается найти правильный способ отображения ‘IVT’ и ‘IVTm’ на той же карте, что и в приведенном здесь примере (IVT красным, IVTm синим):

IVT выделен красным, IVTm - синим

Мне нужно было бы отобразить две величины с помощью палитры, которая работает в обоих направлениях, как в примере.

Спасибо.

Комментарии:

1. Используйте опции zorder=10, alpha=0.6 для второго ax.contourf() . Ниже будет показан первый заполненный контур.

2. не уверен, что понимаю эти параметры. Кажется, что они просто исчезают контуры и сетки, но значения моей палитры остаются прежними.

Ответ №1:

Чтобы это работало с двумя отдельными вызовами contourf , вам нужно будет создать пользовательскую цветовую карту, которая имеет альфа 0 для определенных значений, что кажется большой работой. Самый простой способ здесь, если значения действительно не перекрываются, — объединить их вместе в один массив и отобразить его с помощью contourf :

 IVT_combined = np.where(IVT > 0, IVT, IVTm)
  

Комментарии:

1. Спасибо. Я собираюсь попробовать это