Plotly plot_trisurf не работает с массивами arange - PullRequest
1 голос
/ 08 апреля 2019

Я просто скопировал пример кода, найденный на веб-сайте Matplotlib, но я заменил их радиусы и углы на простые массивы arange.

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

from mpl_toolkits.mplot3d import Axes3D  

import matplotlib.pyplot as plt
import numpy as np
from Equation import Expression


x = np.arange(0,100,0.01)
y = np.arange(0,100,0.01)
x2 = np.append(0,x.flatten())
y2 = np.append(0,y.flatten())
z = x2 + y2
print(z)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_trisurf(x, y, z, linewidth=0.2, antialiased=True)
plt.show()

Я просто пытаюсь построить график z = x + y, но получаю странную ошибку.

"RuntimeError: Ошибка в вычислении триангуляции Делона по qhull: единичные входные данные (код выхода = 2); используйте подробный параметр python (-v), чтобы увидеть исходную ошибку qhull."

Редактировать: я тоже пробовал без вызова flatten(), но я получаю тот же результат.

1 Ответ

0 голосов
/ 08 апреля 2019

Вы получаете ошибку, потому что ваш z не поверхность, а линия.Вам нужно использовать как минимум 3 точки, которые бы определяли плоскость.Одним из вариантов может быть использование np.meshgrid для создания вашей поверхности для черчения, а затем выравнивание всего для вставки в функцию.Попробуйте вернуться к некоторому примеру кода здесь .Обратите внимание, что вы также можете изменить разрешение в зависимости от детализации вашей поверхности.

from mpl_toolkits.mplot3d import Axes3D  

import matplotlib.pyplot as plt
import numpy as np


x = np.arange(0,100,1)
y = np.arange(0,100,1)
x2 = np.append(0,x.flatten())
y2 = np.append(0,y.flatten())

x2,y2 = np.meshgrid(x2,y2) #This is what you were missing

z = x2 + y2

fig = plt.figure(figsize=(12,12))
ax = fig.gca(projection='3d')
ax.plot_trisurf(x2.flatten(), y2.flatten(), z.flatten(), linewidth=0.2, antialiased=True) #flatten all the arrays here


plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...