我正在尝试使用Python Matplotlib使用contourf函数“绘制”立方体的面。这可能吗?
这与here的想法类似,但显然我不能使用补丁。同样,我不认为我可以使用add_collection3d like this,因为它只支持PolyCollection,LineColleciton和PatchCollection。
我一直在尝试在fig.gca(projection='3d')
上使用contourf。下面的玩具例子。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
plt.close('all')
fig = plt.figure()
ax = fig.gca(projection='3d')
############################################
# plotting the 'top' layer works okay... #
############################################
X = np.linspace(-5, 5, 43)
Y = np.linspace(-5, 5, 28)
X, Y = np.meshgrid(X, Y)
varone=np.random.rand(75,28,43)
Z=varone[0,:,:]
cset = ax.contourf(X, Y, Z, zdir='z', offset=1,
levels=np.linspace(np.min(Z),np.max(Z),30),cmap='jet')
#see [1]
plt.show()
#################################################
# but now trying to plot a vertical slice.... #
#################################################
plt.close('all')
fig = plt.figure()
ax = fig.gca(projection='3d')
Z=varone[::-1,:,-1]
X = np.linspace(-5, 5, 28)
Y = np.linspace(-5, 5, 75)
X, Y = np.meshgrid(X, Y)
#this 'projection' doesn't result in what I want, I really just want to rotate it
cset = ax.contourf(X, Y, Z, offset=5,zdir='x',
levels=np.linspace(np.min(Z),np.max(Z),30),cmap='jet')
#here's what it should look like....
ax=fig.add_subplot(1, 2,1)
cs1=ax.contourf(X,Y,Z,levels=np.linspace(np.min(Z),np.max(Z),30),cmap='jet')
#see [2]
plt.show()
1从示例中可以轻松获得顶面:
但是我不知道怎么做两边。此图的左侧是截面的外观(但已旋转)。..
对其他Python方法开放。我实际绘制的数据是地球物理netcdf文件。
2条答案
按热度按时间ss2ws0br1#
您必须将数据分配到正确的轴。锯齿形的结果是,现在你在
x = const
,并且在z
方向上振荡(来自0
和1
之间生成的随机数据)。如果在示例中以不同方式分配矩阵,则最终会得到所需的结果:
结果如下所示:
kgqe7b3p2#
下面给出的答案并不完全令人满意。实际上,x、y和z方向上的平面再现相同的场。
下文中,允许表示每个平面中的正确场的函数。