Як зробити графік 3D розсіювання в Python?


94

Зараз я матричний масив nx3. Я хочу побудувати три стовпці як три осі. Як я можу це зробити?

Я гуглив, і люди пропонували використовувати Matlab , але мені справді важко зрозуміти це. Мені також потрібно, щоб це був розкиданий сюжет.

Хтось може мене навчити?


1
Ви шукаєте програму для створення сюжету, або хочете написати код (будь-якою мовою), який малює сюжет?
Nils Pipenbrinck

Використовуйте асимптоту - вона безкоштовна, потужна, а якість неймовірна!
Хаміш Грубіян

1
Якщо у вас є масив, я вважаю, що у вас є програма, і цей масив є її частиною. Будь ласка, дайте нам можливість допомогти вам, вказавши, про яку програму (мову) мова йде!
Carl Smotricz

Я все одно використовував би asymptote (як lib), або просто генерував вхідний файл для нього. Перевірте, що це неймовірна якість випуску!
Hamish Grubijan

2
Якщо це nмасив на 3, ви отримаєте графік кривої у 3 вимірах. Для "тривимірного графіку" вам знадобиться n x m x lмасив. Вам потрібна крива з будь-яким кортежем, що (x,y,z)представляє точку на кривій?
Alok Singhal

Відповіді:


163

Для цього ви можете використовувати matplotlib . matplotlib має модуль mplot3d, який буде робити саме те, що ви хочете.

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()

Наведений вище код генерує таку цифру:

3D-зображення matplotlib


11
Гарне рішення. Зауважте, що це plt.zlabel('zlabel')не спрацює. Для того, щоб маркувати осі Z. Ви повинні використовувати: ax.set_zlabel('Z').
Йонатан Сімсон

8

Використовуйте наступний код, який мені працював:

# 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 стовпець / вісь із цього масиву і присвоїв цим змінним / масивам відповідно.


1

Замість цього використовуйте асимптоту!

Ось як це може виглядати:

http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.pdf

Це код: http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy

Асимптота також може читати у файлах даних.

І повна галерея: http://asymptote.sourceforge.net/gallery/

Щоб використовувати асимптоти з Python:

http://www.tex.ac.uk/tex-archive/graphics/asymptote/base/asymptote.py


2
Боюся, що більшість посилань у цій відповіді вже мертві = (
alkanen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.