Python绘图3d表面绘图

时间:2015-11-18 20:53:55

标签: python numpy matplotlib

我有一个功能F = 0.8*X+0.6*Y+0.9*Z 但我的问题是X Y和Z相互关联。 X+Y+Z = 1。值和间隔应如下:

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

你能否用一种简单的方法在Python中做到这一点。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果你想在matplotlib中做一个曲面图,你的x,y和z数组应该是2D数组。如果变量的间隔相互依赖,则可以根据变量来定义变量,这些变量的间隔彼此独立,如此处的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