У меня есть сетевые радарные данные 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)