【问题标题】:Plotting data contained in .mat file with python用python绘制.mat文件中包含的数据
【发布时间】:2015-11-26 23:23:41
【问题描述】:

我有一个从 octave 导出的文件 myfile.mat,它包含三个矩阵 X、Y、U,它们都具有相同的大小,我想绘制曲面 U,其中 X、Y 是曲面 U 的 x 和 y 分量。我可以使用以下代码以八度音阶完成:

surf(X,Y,U)

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

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)

但我看到的只是一个空白图形窗口。 这是数据myfile.mat

【问题讨论】:

  • 你能发布 myfile.mat 吗?
  • 我通过添加数据来编辑帖子。

标签: python matplotlib plot octave


【解决方案1】:

我怀疑您忘记在末尾添加对plt.show() 的调用。此函数在 MATLAB/Octave 中没有模拟,但在 matplotlib 中是绝对必需的。另外,请注意plt.show() 在某些 Python 环境中的循环内似乎无法正常工作,因此如果您尝试一次生成多个图像(例如,在“for”循环内生成 10 个不同的图形) 这对你来说也可能是一个隐藏的问题来源。此外,您需要在调用ax.plot_surface() 方法时使用cmap=cm.<whatever> 选项定义颜色图。您可以在here 找到您可能使用的所有颜色图的列表。最后,对于您包含的微小数据文件,您的步幅太大了。我在下面附加了示例代码和生成的图像。我省略了设置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()

【讨论】:

  • 我忘记了帖子中的 plt.show() 代码,但实际上我正在实现它。尽管如此,代码不起作用,为了简单起见,我给出了一个小数据,实际上我的数据更大。无论如何,我根据我的数据采用了你的代码,它们工作正常。谢谢你的回答。
猜你喜欢
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 2012-05-26
  • 1970-01-01
相关资源
最近更新 更多