用python打印.mat文件中包含的数据

用python打印.mat文件中包含的数据,python,matplotlib,plot,octave,Python,Matplotlib,Plot,Octave,我有一个从倍频程导出的文件myfile.mat,它包含三个矩阵X,Y,U,它们都具有相同的大小,我想绘制曲面U,其中X,Y是曲面U的X和Y分量。我可以使用以下代码在倍频程中进行绘制: surf(X,Y,U) 但是我也想用python来做。我正在使用pythonxy,为了在python中绘制数据,首先我使用spyder GUI交互导入数据,在spyder中的变量资源管理器中看到矩阵后,我实现了以下代码 from mpl_toolkits.mplot3d import axes3d import

我有一个从倍频程导出的文件myfile.mat,它包含三个矩阵X,Y,U,它们都具有相同的大小,我想绘制曲面U,其中X,Y是曲面U的X和Y分量。我可以使用以下代码在倍频程中进行绘制:

surf(X,Y,U)
但是我也想用python来做。我正在使用pythonxy,为了在python中绘制数据,首先我使用spyder GUI交互导入数据,在spyder中的变量资源管理器中看到矩阵后,我实现了以下代码

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm

fig = plt.figure()
ax = fig.gca(projection='3d')

ax.plot_surface(X, Y, U, rstride=8, cstride=8, alpha=0.3)
但我看到的只是一个空白的数字窗口。
这是数据

我怀疑您忘了在末尾包含对
plt.show()
的调用。该函数在MATLAB/Octave中没有模拟功能,但在matplotlib中是绝对必需的。另外,请注意,在某些Python环境中,
plt.show()
在循环内部似乎无法正常工作,因此,如果您试图同时生成多个图像(例如,在“for”循环中生成10个不同的图形),这也可能是隐藏的问题源。此外,您需要使用调用
ax.plot\u surface()
方法中的
cmap=cm.
选项定义颜色映射。可以找到您可能使用的所有颜色贴图的列表。最后,对于包含的小数据文件来说,您的步幅太大了。我在下面附加了示例代码和生成的图像。我省略了设置
alpha=0.3
,因为这是不必要的数据(在任何其他数据之前或之后都没有任何内容),但如果您愿意,可以将其放回;代码仍然有效

import scipy.io
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

data = scipy.io.loadmat('myfile.mat')
X = data['X']
Y = data['Y']
U = data['U']

fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, U, rstride=1, cstride=1, cmap=cm.jet)
fig.colorbar(surf)

plt.show()


你能发布myfile.mat吗?我通过添加数据来编辑帖子。我忘记了帖子中的plt.show()代码,但实际上我正在实现它。尽管如此,代码还是不起作用,为了简单起见,我给出了一个小数据,实际上我的数据更大。不管怎样,我根据我的数据采用了你的代码,它们工作得很好。谢谢你的回答。