【发布时间】:2013-04-05 23:41:54
【问题描述】:
我正在尝试在 python 中使用pcolor 制作 DFT(离散傅立叶变换)图。我以前一直在使用 Mathematica 8.0 来执行此操作,但我发现 Mathematica 8.0 中的颜色条与我尝试表示的数据的一对一相关性很差。例如,这是我正在绘制的数据:
[[0.,0.,0.10664,0.,0.,0.,0.0412719,0.,0.,0.],
[0.,0.351894,0.,0.17873,0.,0.,0.,0.,0.,0.],
[0.10663,0.,0.178183,0.,0.,0.,0.0405148,0.,0.,0.],
[0.,0.177586,0.,0.,0.,0.0500377,0.,0.,0.,0.],
[0.,0.,0.,0.,0.0588906,0.,0.,0.,0.,0.],
[0.,0.,0.,0.0493811,0.,0.,0.,0.,0.,0.],
[0.0397341,0.,0.0399249,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]]
因此,它在 DFT 矩阵中有很多零或少量数字或少量高频能量。
当我使用mathematica 绘制时,结果如下:
颜色条已关闭,我想我想用 python 来绘制它。 我的python代码(我从here劫持的)是:
from numpy import corrcoef, sum, log, arange
from numpy.random import rand
#from pylab import pcolor, show, colorbar, xticks, yticks
from pylab import *
data = np.array([[0.,0.,0.10664,0.,0.,0.,0.0412719,0.,0.,0.],
[0.,0.351894,0.,0.17873,0.,0.,0.,0.,0.,0.],
[0.10663,0.,0.178183,0.,0.,0.,0.0405148,0.,0.,0.],
[0.,0.177586,0.,0.,0.,0.0500377,0.,0.,0.,0.],
[0.,0.,0.,0.,0.0588906,0.,0.,0.,0.,0.],
[0.,0.,0.,0.0493811,0.,0.,0.,0.,0.,0.],
[0.0397341,0.,0.0399249,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]], np.float)
pcolor(data)
colorbar()
yticks(arange(0.5,10.5),range(0,10))
xticks(arange(0.5,10.5),range(0,10))
#show()
savefig('/home/mydir/foo.eps',figsize=(4,4),dpi=100)
这个python代码绘制为:
现在这是我的问题/问题列表: 我喜欢python如何绘制这个并且想使用它但是......
- 如何使代表“0”的所有“蓝色”消失,就像在我的数学绘图中一样?
- 如何旋转绘图以使左上角有亮红色的点?
- 我设置“dpi”的方式对吗?
- 我应该使用哪些有用的参考资料来加强我对 python 的热爱?
我查看了此处的其他问题和 numpy 的用户手册,但没有找到太多帮助。
我计划发布这些数据,并且正确处理所有的点点滴滴非常重要! :)
编辑:
修改后的 python 代码和结果图!有人会对此提出哪些改进建议以使其值得出版?
from numpy import corrcoef, sum, log, arange, save
from numpy.random import rand
from pylab import *
data = np.array([[0.,0.,0.10664,0.,0.,0.,0.0412719,0.,0.,0.],
[0.,0.351894,0.,0.17873,0.,0.,0.,0.,0.,0.],
[0.10663,0.,0.178183,0.,0.,0.,0.0405148,0.,0.,0.],
[0.,0.177586,0.,0.,0.,0.0500377,0.,0.,0.,0.],
[0.,0.,0.,0.,0.0588906,0.,0.,0.,0.,0.],
[0.,0.,0.,0.0493811,0.,0.,0.,0.,0.,0.],
[0.0397341,0.,0.0399249,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]], np.float)
v1 = abs(data).max()
v2 = abs(data).min()
pcolor(data, cmap="binary")
colorbar()
#xlabel("X", fontsize=12, fontweight="bold")
#ylabel("Y", fontsize=12, fontweight="bold")
xticks(arange(0.5,10.5),range(0,10),fontsize=19)
yticks(arange(0.5,10.5),range(0,10),fontsize=19)
axis([0,7,0,7])
#show()
savefig('/home/mydir/Desktop/py_dft.eps',figsize=(4,4),dpi=600)
【问题讨论】:
-
看起来你已经得到了答案,但你也可以看看使用 pcolormesh,它比 pcolor 快得多...
-
@pelson 谢谢!非常感谢您的评论! @ 987654330@ 我希望从mathematica 迁移到python,并且在将mathematica“插值函数多项式”保存为离散数据以在python 中使用时遇到了很大的困难!
:(
标签: python numpy matplotlib plot wolfram-mathematica