#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 синим):
Мне нужно было бы отобразить две величины с помощью палитры, которая работает в обоих направлениях, как в примере.
Спасибо.
Комментарии:
1. Используйте опции
zorder=10, alpha=0.6
для второгоax.contourf()
. Ниже будет показан первый заполненный контур.2. не уверен, что понимаю эти параметры. Кажется, что они просто исчезают контуры и сетки, но значения моей палитры остаются прежними.
Ответ №1:
Чтобы это работало с двумя отдельными вызовами contourf
, вам нужно будет создать пользовательскую цветовую карту, которая имеет альфа 0 для определенных значений, что кажется большой работой. Самый простой способ здесь, если значения действительно не перекрываются, — объединить их вместе в один массив и отобразить его с помощью contourf
:
IVT_combined = np.where(IVT > 0, IVT, IVTm)
Комментарии:
1. Спасибо. Я собираюсь попробовать это