Как построить трехмерные данные метеорологического радара в Python - PullRequest
0 голосов
/ 08 января 2019

У меня есть сетевые радарные данные NEXRAD, которые я создал, используя другой пакет, и я пытаюсь создать трехмерный график данных отражательной способности радара. Данные имеют координаты x, y, z: Imgur В качестве справки каждая сетка составляет 250 м.

Я надеюсь построить что-то вроде этого: Имгур

Я просмотрел документацию по 3D-графику matplotlib, но не нашел ничего, что, как мне показалось, могло бы работать, поскольку данные не равны x, y, где z - это значения данных.

Я также видел пример использования Mayavi Mlab для создания трехмерных точечных графиков, но я больше ищу фасонные поверхности.

Я думаю, что использование mayavi mlab contour3d может работать, но я не знаю, как создать сетку. Вот пример из документации http://docs.enthought.com/mayavi/mayavi/auto/mlab_helper_functions.html:

import numpy
from mayavi.mlab import *
def test_contour3d():
    x, y, z = np.ogrid[-5:5:64j, -5:5:64j, -5:5:64j]
    scalars = x * x * 0.5 + y * y + z * z * 2.0
    obj = contour3d(scalars, contours=4, transparent=True)
    return obj

Я могу легко построить 2d поля с помощью matplotlib contourf:

plt.contourf(ds.x,ds.y, ds.reflectivity[0,:,:])

и получите это: Имгур

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

Я думал о том, чтобы сделать что-то вроде линий, где я делаю заполненные контуры z, где данные находятся между определенным порогом, что-то вроде:

if ds.reflectivity >= 40:
   ax.contourf(ds.x, ds.y, ds.z)
elif ds.reflectivity > 30 and ds.reflectivity < 40:
   ax.contourf(ds.x, ds.y, ds.z, color = 'orange', alpha = .7)
...