Как построить поверхность без использования сетки - PullRequest
0 голосов
/ 28 декабря 2018

Как я могу построить поверхность данных, которые у меня есть в форме ниже.

Столбец 1 - X;Колум 2 - Y;Столбец 3 - Z;

В приведенном ниже примере есть 4 отличительные точки для X и 3 для Y, однако я не могу предсказать это, и мне придется каждый раз анализировать данные, чтобы определить, как преобразовать столбцы в сетку,Могу ли я построить точки так же, как они?(Список координат.)

[[0.         0.         0.        ]
 [0.         0.5        0.6989218 ]
 [0.         1.         0.87790919]
 [0.25       0.         0.0505097 ]
 [0.25       0.5        0.7494315 ]
 [0.25       1.         0.92841889]
 [0.5        0.         0.09192357]
 [0.5        0.5        0.79084537]
 [0.5        1.         0.96983276]
 [0.75       0.         0.10310818]
 [0.75       0.5        0.80202997]
 [0.75       1.         0.98101736]
 [1.         0.         0.12209081]
 [1.         0.5        0.82101261]
 [1.         1.         1.        ]]

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Если я правильно понял ваши комментарии, вы в основном ищете plot_trisurf .Здесь data - это ваша матрица данных, в которой я принимаю первый, второй и третий столбцы как данные x, y, z соответственно.

Для этого вам не нужно изменять форму.Вход для plot_trisurf представляет собой 1-й массив.

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

# data = # your matrix here

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")

x = data[:, 0]
y = data[:, 1]
z = data[:, 2]

ax.plot_trisurf(x,y,z)

enter image description here

0 голосов
/ 28 декабря 2018

В matplotlib.pyplot есть опция для scatter на 3 яркости.Что-то вроде:

import matplotlib.pyplot as plt
plt.figure()
plt.scatter(x, y, z)
plt.show()

Здесь - документация.

edit: Для трехмерной печати вы можете попробовать библиотеку mpl_toolkits.mplot3d следующим образом:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
Axes3D.plot_surface(X, Y, Z, *args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...