[英]Arranging data to make a 3d surface plot
我正在尝试绘制3D表面图,但是我无法将数据转换为正确的格式。
重塑我的Z变量会给我:“ ValueError:新数组的总大小必须保持不变”。 Z的形状为(2500,50)。 X和Y的形状均为(50,50)。 我不确定为什么会这样。 我缺少的代码明显有问题吗?
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
def Mountain(F, P):
TA = ((TAmax-TAmin) * (((FF**g)/((FF**g)+FFhm**g)**a)/((((FF**g)/((FF**g)+FFhm**g))**a)+(SP/SPe)**a)))
return TA
F = np.linspace(0,120)
P = np.linspace(0,100)
Fb= int(21)
Fro= int(362)
FFhm = int(63)
g= int(3)
a = int(3)
SPmin = float(1.82)
SPbend = float(0.5)
SPe = int(10)
TAmax= int(1)
TAmin = int(0)
SP = SPmin + SPbend * np.log(1 + np.exp((P - SPmin)/SPbend))
FF= (Fb * (np.log(1 + np.exp(Fro/Fb)) - np.log(1 + np.exp((Fro-F)/Fb))))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X, Y = np.meshgrid(F, P)
gh= list(zip(np.ravel(X), np.ravel(Y)))
zs = np.array(Mountain(F,P) for F,P in gh)
Z = zs.reshape(X.shape)
ax.plot_surface(X, Y, Z)
ax.set_xlabel('F')
ax.set_ylabel('P')
ax.set_zlabel('TA')
plt.show()
您必须为每对(X,Y)输入z值。 这意味着您不需要numpy.ravel
。 X,Y和Z的大小必须相同:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
def Mountain(F, P):
TA = ((TAmax-TAmin) * (((FF**g)/((FF**g)+FFhm**g)**a)/((((FF**g)/((FF**g)+FFhm**g))**a)+(SP/SPe)**a)))
return TA
F = np.linspace(0,120)
P = np.linspace(0,100)
Fb= int(21)
Fro= int(362)
FFhm = int(63)
g= int(3)
a = int(3)
SPmin = float(1.82)
SPbend = float(0.5)
SPe = int(10)
TAmax= int(1)
TAmin = int(0)
SP = SPmin + SPbend * np.log(1 + np.exp((P - SPmin)/SPbend))
FF= (Fb * (np.log(1 + np.exp(Fro/Fb)) - np.log(1 + np.exp((Fro-F)/Fb))))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X, Y = np.meshgrid(F, P)
Z = np.array(Mountain(F,P))
ax.plot_surface(X, Y, Z)
ax.set_xlabel('F')
ax.set_ylabel('P')
ax.set_zlabel('TA')
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.