Контуры неравномерных данных 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 для неструктурированных данных (или вообще), но тогда вам нужно будет генерировать триангуляцию (которая в вашем случае проста).

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

  • Как построить файлы с numpy?
  • Как построить график с осью x в верхней части рисунка?
  • Как я могу получить длину одного элемента по оси в matplotlib в пикселях?
  • python: построение каркаса 3D-кубоида
  • Размещение пользовательских изображений в окне графика - как пользовательские маркеры данных или аннотирование этих маркеров
  • Python Pylab pcolor для графиков качества публикации
  • Python: 3D-график бутылки Klein
  • Поместите изображение между настраиваемыми строками в сюжете в python
  • Создайте планшет для сюжета
  • Могу ли я предоставить границу (контур) линии в функции графика matplotlib?
  • R-образный буфер данных данных в matplotlib
  • Python - лучший язык программирования в мире.