2015-11-18 73 views
0

我有一個功能F = 0.8*X+0.6*Y+0.9*Z 但我的問題是X Y和Z彼此相關。 X+Y+Z = 1。值和間隔應該是這樣的:Python繪圖3d繪圖

X = np.arange(0,1,0.01) 
Y = np.arange(0,(1-X),0.01) 
Z = 1-(X+Y) 

請你給一個簡單的方法來做到這一點在Python中。 在此先感謝。

回答

1

如果你想在matplotlib中做一個曲面圖,你的x,y和z數組應該是二維數組。如果你的變量的間隔依賴於彼此,你可以定義你的變量的變量的時間間隔是互相獨立的像u和v在這裏。

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

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

u = np.linspace(0, 1, 100) 
v = np.linspace(1, 0, 100) 

x = np.outer(np.ones_like(u), v) 
y = np.outer(v, u) 
z = 1 - x - y 
f = 0.8*x + 0.6*y + 0.9*z 

norm = Normalize (f.min(), f.max()) 
m = plt.cm.ScalarMappable() 
m.set_array([]) 
fcolors = m.to_rgba(f) 

ax.view_init(azim=45) 
ax.plot_surface(x, y, z, norm=norm, rstride=2, cstride=2, facecolors=fcolors, shade=False) 

plt.show() 

enter image description here

+0

謝謝你的答案。我意識到我有兩個變量:x和y。 z基本上是1-x-y。所以我相應地改變了我的功能。從簡單的修改你的代碼我得到了我想要的陰謀。 代替使用: ax.plot_surface(X,Y,Z,範數=範數,rstride = 2,cstride = 2,facecolors = fcolors,遮陽=假) 我使用: ax.plot_surface(X, y,f,rstride = 2,cstride = 2,facecolors = fcolors,shade = False) –

+0

@OrhanAbar你用什麼產生一個3d圖(即顏色和點的高度均爲f)。礦產生一個四維圖(即點的高度是z和他們的顏色是f) – Azad