【发布时间】:2018-05-16 10:26:36
【问题描述】:
我从this 问题中学会了在 python 中合并来自两个矩形的网格网格点。合并后的网格点为:
这里每个网格点都包含它们各自的值,我想绘制它的 3-D 曲面图。对于完整的网格(没有空白点),我会编写以下代码:
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
x=np.arange(0,10,1)
y=np.arange(0,12,1)
X, Y = np.meshgrid(x,y)
print (Y)
Z = gridValue.reshape(X.shape)
cset = ax.pcolormesh(X, Y, Z, cmap=cm.coolwarm, linewidth =0, antialiased = False)
ax.clabel(cset, fontsize=9, inline=1)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('σ ')
fig.colorbar(cset, shrink=0.5, aspect =5)
plt.show()
当我尝试用上面的代码绘制网格值(80 个点)时,我得到一个明显的错误:
ValueError: cannot reshape array of size 80 into shape (12,10)
我期待下图(不完全但类似的方式)作为最终的 3-D 曲面图:
我的情况如何绘制 3-D 曲面图?
谢谢。
编辑:我尝试使用以下代码 sn-p 进行绘图:
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
x1=np.arange(0,2,1)
x2 = np.arange(0,10,1)
y1 =np.arange(0,5,1)
y2=np.arange(5,12,1)
Y1, X1 = np.meshgrid(x1,y1)
Y2, X2 = np.meshgrid(x2,y2)
gridValue1 = gridValue[:10]
gridValue2 = gridValue[10:]
Z1 = gridValue1.reshape(X1.shape)
Z2 = gridValue2.reshape(X2.shape)
cset1 = ax.plot_surface(X1, Y1, Z1, cmap=cm.coolwarm, linewidth =0, antialiased = False)
cset2 = ax.plot_surface(X2, Y2, Z2, cmap=cm.coolwarm, linewidth =0, antialiased = False)
ax.clabel(cset1, fontsize=9, inline=1)
ax.clabel(cset2, fontsize=9, inline=1)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('σ ')
plt.show()
我用这段代码得到了下图:
现在的问题是说明这个数字。颜色代码(红色表示高值,蓝色表示低值)不再有效。因为蓝色网格点(第一张图中)的gridValues 很高,所以大部分在曲面图中应该是红色的。因此,合并两个单独的 3-D 曲面图并不是解决我的问题的方法。任何帮助,请!
【问题讨论】:
-
gridValue丢失。 -
@Scotty1- 上面的代码只是一个代码 sn-p。该错误不是由于缺少
gridValue。它是在不同的代码行中计算出来的。 -
在我的回答中添加了颜色条缩放
标签: python python-3.x numpy matplotlib