Соедините точки в трехмерном графике

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

Мой код:

from matplotlib import pyplot
import pylab
from mpl_toolkits.mplot3d import Axes3D

fig = pylab.figure()
ax = Axes3D(fig)

sequence_containing_x_vals = [5,5,5,5,10,10,10,10,15,15,15,15,20,20,20,20]
sequence_containing_y_vals = [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]
sequence_containing_z_vals = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

ax.scatter(sequence_containing_x_vals, sequence_containing_y_vals, sequence_containing_z_vals)

pyplot.show()

Это отобразит все точки в пространстве, но я хочу, чтобы они были связаны и что-то вроде этого:

Пример сюжета

(Раскраска была бы хороша, но не обязательна)

1 ответ

Решение

Для построения поверхности нужно использовать plot_surfaceи иметь данные в виде обычного 2D-массива (который отражает 2D-геометрию плоскости XY). Обычно meshgrid используется для этого, но так как ваши данные уже имеют значения x и y, повторенные соответствующим образом, вам просто нужно изменить их форму. Я сделал это с NumPy reshape,

from matplotlib import pyplot, cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = pyplot.figure()
ax = Axes3D(fig)

sequence_containing_x_vals = np.array([5,5,5,5,10,10,10,10,15,15,15,15,20,20,20,20])
X = sequence_containing_x_vals.reshape((4,4))

sequence_containing_y_vals = np.array([1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4])
Y = sequence_containing_y_vals.reshape((4,4))

sequence_containing_z_vals = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
Z = sequence_containing_z_vals.reshape((4,4))

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.hot)

pyplot.show()

Обратите внимание, что X, Y = np.meshgrid([1,2,3,4], [5, 10, 15, 20]) даст то же самое X а также Y как указано выше, но проще.

Конечно, показанная здесь поверхность - это просто плоскость, поскольку ваши данные соответствуют z = x + y - -5, но этот метод будет работать с общими поверхностями, как это можно видеть во многих matplotlib surface Примеры.

Другие вопросы по тегам