Как создать трехмерную диаграмму рассеяния в Python?
-
22-09-2019 - |
Вопрос
В настоящее время у меня есть матричный массив nx3.Я хочу построить три столбца как три оси.Как мне это сделать?
Я погуглил, и люди предложили использовать Матлаб, но мне действительно трудно это понять.Мне также нужно, чтобы это был график рассеяния.
Может ли кто-нибудь научить меня?
Решение
Вы можете использовать matplotlib для этого.matplotlib имеет plot3d модуль, который будет делать именно то, что вы хотите.
from matplotlib import pyplot
from mpl_toolkits.mplot3d import Axes3D
import random
fig = pyplot.figure()
ax = Axes3D(fig)
sequence_containing_x_vals = list(range(0, 100))
sequence_containing_y_vals = list(range(0, 100))
sequence_containing_z_vals = list(range(0, 100))
random.shuffle(sequence_containing_x_vals)
random.shuffle(sequence_containing_y_vals)
random.shuffle(sequence_containing_z_vals)
ax.scatter(sequence_containing_x_vals, sequence_containing_y_vals, sequence_containing_z_vals)
pyplot.show()
Приведенный выше код генерирует следующую фигуру:
Другие советы
Используйте следующий код, он сработал для меня:
# Create the figure
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Generate the values
x_vals = X_iso[:, 0:1]
y_vals = X_iso[:, 1:2]
z_vals = X_iso[:, 2:3]
# Plot the values
ax.scatter(x_vals, y_vals, z_vals, c = 'b', marker='o')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
plt.show()
в то время как X_iso — это мой трехмерный массив, а для X_vals, Y_vals, Z_vals я скопировал/использовал 1 столбец/ось из этого массива и присвоил этим переменным/массивам соответственно.
Вместо этого используйте асимптоту!
Вот как это может выглядеть:
http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.pdf
Это код:http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy
Asymptote также может читать файлы данных.
И полная галерея:http://asymptote.sourceforge.net/gallery/
Чтобы использовать асимптоту изнутри Python:
http://www.tex.ac.uk/tex-archive/graphics/asymptote/base/asymptote.py