Matplotlib 3D线框图未按预期绘制
我正在进行一个有两个变量的模拟:P和Q。
P和Q的取值范围都是[0.2, 0.4, 0.6, 0.8]。
每一种P和Q的组合都会产生一个输出,我称之为NB_Means。 NB_Means是通过将P设置为0.2,然后让Q在[0.2, 0.4, 0.6, 0.8]之间变化来生成的,之后我会把P改为0.4,重复这个过程。
举个例子,在NB_Means中:当p=0.2且q=0.2时,结果是32;当p=0.2且q=0.4时,结果是159,依此类推。
我想要绘制一个这样的线框图:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
x=[.2,.2,.2,.2,.4,.4,.4,.4,.6,.6,.6,.6,.8,.8,.8,.8]
y=[.2,.4,.6,.8,.2,.4,.6,.8,.2,.4,.6,.8,.2,.4,.6,.8]
nb_means = [32, 159, 216, 327, 206, 282, 295, 225, 308, 252, 226, 229, 301, 276, 262, 273]
fig = plt.figure()
ax = plt.axes(projection='3d')
X,Y = np.meshgrid(x,y)
ax.set_title('Name Based Routing')
ax.set_xlabel('Prob of Request')
ax.set_ylabel('Prob of Publish')
ax.set_zlabel('RTT')
ax.plot_wireframe(X, Y, nb_means, rstride=10, cstride=10)
plt.show()
但是,正如你在上面的输出中看到的……我原本期待线框图在Q轴上是逐渐增加的,但实际上并不是这样。
我是在设置x轴和y轴的时候出错了吗?
1 个回答
3
X
、Y
和 nb_means
都是问题所在。它们应该都是二维数组(而你的 nb_means
现在是一个一维列表)。而且,你也不需要用 meshgrid 来创建 X
和 Y
,你只需要把它们重新调整形状就可以了:
X = np.reshape(x, (4,4))
Y = np.reshape(y, (4,4))
nb2 = np.reshape(nb_means, (4,4))
...
ax.plot_wireframe(X, Y, nb2)
另外,你可能也不太需要设置 rstride=10 和 cstride=10。