2015-02-12 2 views
2

У меня есть три массива 2d: X, Y, Z, которые содержат нерегулярные координаты трех точек, соответственно. И еще один 2-й массив данные, который содержит значения на этих точках. То, что я хочу сделать, это отобразить эти данные в 3D пространстве, с 0 значением части замаскированного out.Much как этот:Как это сделать, используя Matplotlib или Mayavi?

enter image description here

В MATLAB, я могу использовать функции fill3 для достижения это, но как я могу построить такой же вид изображения в matplotlib или mayavi? Я пытался использовать маски массива, plot_surface и colorface вместе, как например здесь: Plotting a masked surface plot using python, numpy and matplotlib

и он работал, результат по ссылке ниже:

enter image description here но это действительно очень медленно , и будет стоить слишком много времени. Есть ли способ лучше?

+0

Координатные массивы являются нерегулярным распределением! например: X = [0,1,0,2,5, -1,2] Y = [1,2,1,4,0, -5] Z = [10,15,9,20,13] – viczhn

+0

Мое ОКР заставляет меня ненавидеть со всей силой те, которые не перпендикулярно выглядят осью в matplotlib. –

ответ

0

Ну, сегодня я выясню альтернативный способ решения проблемы. За исключением использования plot_surface, я выбираю использовать scatter3D, основной код является то, что некоторые, как этот aa=np.shape(X)[0] bb=np.shape(X)[1] x=X.reshape(aa*bb) y=Y.reshape(aa*bb) z=Z.reshape(aa*bb) data=data.reshape(aa*bb) x1=[] y1=[] z1=[] da1=[] for i in range(aa*bb): if data[i]>0: x1.append(x[i]) y1.append(y[i]) z1.append(z[i]) da1.append(data[i]) my_cmap=cm.jet my_cmap.set_over('c') my_cmap.set_under('m') N=da1/max(da1) fig=plt.figure() ax=fig.add_subplot(111,projection='3d') ax.scatter3D(x1,y1,z1,s=6,alpha=0.8,marker=',',facecolors=my_cmap(N),lw=0)

и результат таков:

enter image description here

это не решает проблему, но это хорошая замена. Я буду ждать больше ответов.

 Смежные вопросы

  • Нет связанных вопросов^_^