Шерический сюжет в ВТК из python numpy массивов - PullRequest
0 голосов
/ 04 мая 2020

Мне нужно нанести на график данные, которые находятся в Python (или в каком-то файле, который я прочитал из python), а не в файле VTK. Я хотел бы получить эквивалент этого простого сценария matplotlib, используя VTK с векторизованным входом (предпочтительно numpy массивами). Я хотел бы иметь возможность обновлять это непосредственно из приложения в отзывчивой манере (то есть шаблон, изменяющийся в ответ на некоторый параметр в пользовательском интерфейсе)

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# make some interesting data
theta = np.linspace(-np.pi/2, np.pi/2, 181)
phi = np.arange(np.pi, -np.pi, -np.pi/180)[::-1]
r = np.outer(np.sin(2*phi), np.sin(2*theta))

# xyz it
x = r * np.outer(np.cos(phi), np.sin(theta))
y = r * np.outer(np.sin(phi), np.sin(theta))
z = r * np.outer(np.ones(np.size(phi)), np.cos(theta))

# plot the surface
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, color='b')

plt.show()

enter image description here

Я нашел множество примеров, показывающих, как вывести данные из структур VTK в Python, но мое требование наоборот. Я также нашел примеры того, как строить массивы VTK элемент за элементом, но это Python; Мне нужно, чтобы оно было векторизовано, поскольку я хочу, чтобы оно обновлялось быстро. Я также не смог выяснить, как перейти от 2D StructuredGrid к сферическому графику.

1 Ответ

1 голос
/ 04 мая 2020

Может быть этот пример может помочь:

from vtkplotter import *
from vtkplotter.pyplot import plot
import numpy as np

def rhofunc(theta, phi):
    if theta < 0.2:
        return np.nan # make some points invalid
    return (3*cos(theta)**2 - 1)**2 # Y(l=2 m=0)

# Build the plot, return a vtkAssembly
spl = plot(rhofunc, mode='spheric', cmap='viridis')
show(spl, axes=12)

enter image description here

...