Python: MPLOT3D, графика твердого вещества
-
25-09-2019 - |
Вопрос
Я пытаюсь график каркасной твердой революции. Я следую за примером для сферы здесь Но я немного в потере. Я все упростил, но теперь застрял по ошибке. Я также смотрю на функциональные аргументы, описанные описанные здесь, но если я что-то не понимаю, этот код должен быть в порядке. Я понимаю, что то, что я пытаюсь рисовать, - это линия, а не форма, но я не понимаю, почему я не могу использовать этот метод, чтобы нарисовать его в любом случае. Я пытаюсь получить этот пример как можно просто, поэтому я могу перейти к графике фактического твердого вещества. Вот:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plot
import numpy
import pylab
fig = plot.figure()
ax = Axes3D(fig)
n = numpy.linspace(0, 100)
x = n
y = x**2
z = 1
ax.plot_wireframe(x, y, z)
plot.show()
Вот ошибка:
Traceback (most recent call last):
File "test.py", line 14, in <module>
ax.plot_wireframe(x, y, z)
File "/usr/lib/pymodules/python2.6/mpl_toolkits/mplot3d/axes3d.py", line 687, in plot_wireframe
rows, cols = Z.shape
AttributeError: 'int' object has no attribute 'shape'
Решение
Когда Matplotlib записывает аргументы данных в заглавных буквах, что означает ожидает матрицы данных. Вы можете использовать meshgrid
функция (см. пример для mplot3d
) генерировать сетку.
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plot
import numpy
import pylab
fig = plot.figure()
ax = Axes3D(fig)
n = numpy.linspace(0, 100)
x = n
y = x**2
X, Y = numpy.meshgrid(x, y)
Z = numpy.ones_like( X )
ax.plot_wireframe(X, Y, Z)
Обратите внимание, что в примере вы дали, точки сетки для сферы построены с помощью внешний продукт.