【问题标题】:Python Pylab pcolor options for publication quality plots用于出版质量图的 Python Pylab pcolor 选项
【发布时间】: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如何绘制这个并且想使用它但是......

  1. 如何使代表“0”的所有“蓝色”消失,就像在我的数学绘图中一样?
  2. 如何旋转绘图以使左上角有亮红色的点?
  3. 我设置“dpi”的方式对吗?
  4. 我应该使用哪些有用的参考资料来加强我对 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


【解决方案1】:

以下内容将使您更接近您想要的:

import matplotlib.pyplot as plt

plt.pcolor(data, cmap=plt.cm.OrRd)
plt.yticks(np.arange(0.5,10.5),range(0,10))
plt.xticks(np.arange(0.5,10.5),range(0,10))
plt.colorbar()
plt.gca().invert_yaxis()
plt.gca().set_aspect('equal')
plt.show()

默认情况下可用的颜色图列表是here。你需要一个一开始是白色的。

如果这些都不适合您的需求,您可以尝试生成自己的,首先查看LinearSegmentedColormap

【讨论】:

  • 有趣!谢谢!但是,我试图弄清楚:为什么颜色图范围以0.32 结尾?为什么这个0.32 不走极端?看起来最后一个 0.04 被省略了! :P
  • 您的数据被标准化为 0.0 - 1.0 的范围,然后应用颜色图。默认情况下,数据的最大值映射到 1.0,最小值映射到 0.0。您数据中的最大值是 0.351894,因此这将是您的颜色图的终点。您可以通过在对 pcolor 的调用中指定 vminvmax 来更改此行为,例如plt.pcolor(data, cmap='binary', vmin=0, vmax=0.4) 将在颜色图上显示最后的 0.4,但您的最暗点不会像以前那样黑。
  • 我确实尝试过vminvmax,但这向我抛出了一条错误消息。我会尝试重现它...
【解决方案2】:

仅作记录,在 Mathematica 9.0 中:

GraphicsGrid@{{MatrixPlot[l, 
    ColorFunction -> (ColorData["TemperatureMap"][Rescale[#, {Min@l, Max@l}]] &), 
    ColorFunctionScaling -> False], BarLegend[{"TemperatureMap", {0, Max@l}}]}}

【讨论】:

  • 是的!我明白了,谢谢! :) 但是我无法访问 mma 9 校外。我只有 mma 8 访问校外....
  • @drN,请注意,即使 Mathematica 也没有按照您的建议将颜色条标记到最大点。它的行为就像上面提供的 Python 解决方案一样(非常相似)。
猜你喜欢
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多