Контуры неравномерных данных 2d в python / matplotlib над рельефом

У меня возникли проблемы с контуром некоторых данных в matplotlib. Я пытаюсь построить вертикальное поперечное сечение температуры, которое я нарезал из 3d-поля температуры.

Мой температурный массив (T) имеет размер 50 * 300, где 300 – количество горизонтальных уровней, которые равномерно распределены. Однако 50 представляет собой количество вертикальных уровней, которые: а) неравномерно распределены; и b) имеют другой начальный уровень для каждого вертикального столбца. Как и в случае, существует всегда 50 вертикальных уровней, но иногда они простираются от 100 до 15000 м, а иногда и от 300 до 20000 м (из-за различий в рельефе местности).

У меня также есть 2d массив высоты (Z, та же форма, что и T), 1d массив горизонтального местоположения (LAT) и 1d массив высоты местности (TER).

Я пытаюсь получить такой же сюжет, как здесь, где вы можете увидеть, что ландшафт затушевывается, и данные очерчены вокруг него.

Моя первая попытка сделать это – создать сетку горизонтального расстояния и высоты, а затем контурную температуру с этими аргументами. Однако numpy.meshgrid требует 1d входов, а мой рост – 2d. Выполнение чего-то вроде этого только начинается с первого столбца:

ax1 = plt.gca() z1, x1 = np.meshgrid(LAT, Z[:,0]) plt.contourf(z1, x1, T) ax1.fill_between(z1[0,:], 0, TER, facecolor='black') 

Который производит это . Если я использую Z [:, – 1] в meshgrid, он контуров под землей для столбцов слева, что, очевидно, я не хочу. Я действительно хотел бы использовать некоторый 2d-массив для Z в meshgrid, но я не уверен, как это сделать.

Я также рассмотрел функцию griddata, но для этого нужны и 1D-входы. У кого-нибудь есть идеи о том, как подойти к этому? Любая помощь приветствуется!

One Solution collect form web for “Контуры неравномерных данных 2d в python / matplotlib над рельефом”

Насколько я понимаю, ваши данные структурированы. Затем вы можете напрямую использовать параметр contourf или contour в matplotlib . Код, который вы представляете, имеет правильную идею, но вы должны использовать

 x1, z1 = np.meshgrid(LAT, Z[:,0]) plt.contourf(x1, Z, T) 

для контуров. У меня есть пример ниже

 import numpy as np import matplotlib.pyplot as plt L, H = np.pi*np.mgrid[-1:1:100j, -1:1:100j] T = np.cos(L)*np.cos(2*H) H = np.cos(L) + H plt.contourf(L, H, T, cmap="hot") plt.show() 

Посмотрите, что сетка генерируется с исходным ограничивающим прямоугольником, но график сделан с измененной высотой, а не с исходной. Кроме того, вы можете использовать tricontour для неструктурированных данных (или вообще), но тогда вам нужно будет генерировать триангуляцию (которая в вашем случае проста).

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

  • График Matplotlib с переменной шириной линии
  • Python Pylab pcolor для графиков качества публикации
  • В Spyder, сюжет с использованием Matplotlib с интерактивным увеличением и т. Д.
  • Как нарисовать линию внутри участка рассеяния
  • Определение плотности двумерного ядра с помощью Python
  • Как нарисовать график, соединяющий точки с двух времен измерения?
  • Python: как построить карту тепла для координат с разной интенсивностью цвета или разным радиусом окружностей?
  • matplotlib: ограничения при использовании графика и imshow в тех же осях
  • Python - лучший язык программирования в мире.