2015-08-11 1 views
0

У меня вопрос в этом вопросе и нашел: surface plots in matplotlib , но он невероятно запутался, применив его к моей проблеме. Я тоже смотрел сайт matplotlib, но было сложно определить аргументы.Поверхностный участок в python

В настоящее время у меня есть матрица U, где каждая строка i является значением пут-опциона из-за определенной цены акций в момент i. Например. U [0,0] - значение опциона в момент времени 0, когда цена акции равна 0. U [1,0] - значение опциона в момент времени 1, когда цена акции равна 0. U [1,1] - значение опциона в момент 1, когда цена акций является первой узловой точкой.

Я хочу иметь 3D-график этого, то есть показывая эволюцию значения опциона относительно цены акций во времени.

Ось X: Цена акций Ось Y: Значение опциона Ось Z: Время.

Может ли кто-нибудь мне помочь? Спасибо, James

+2

Действительно простой пример кода по адресу: // matplotlib.org/examples/mplot3d/surface3d_demo.html. Сначала запустите эту программу, так как у вас есть рабочая стартовая точка. Затем подключите свои собственные массивы для x и y и последовательность раз для z. Играйте с элементами управления, чтобы они выглядели правильно, используя документы для справки. –

ответ

2

Во-первых, вам нужно будет сделать ваши координаты Z и X, которые являются индексами вашей матрицы. Вы можете получить размер матрицы с matrix.shape, а затем используйте meshgrid для создания сетки координат. Тогда вы можете получить значения из матрицы, соответствующей каждому набору (г, х) координаты и поместить их в Y.

Например:

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

fig = plt.figure() 
ax = fig.gca(projection='3d') 
matrix = np.array([[0, 1, 2, 3, 4], [.5, 1.5, 2.5, 3.5, 4.5], [1, 2, 3, 4, 5]]) 
z, x = matrix.shape 
Z = np.arange(0, z, 1) 
X = np.arange(0, x, 1) 
Z, X = np.meshgrid(Z, X) 
Y = matrix[Z, X] 
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, 
     linewidth=0, antialiased=False, cmap = cm.coolwarm) 

plt.show()