用于出版物质量绘图的Python Pylab pcolor选项
我试图用python中的用于出版物质量绘图的Python Pylab pcolor选项,python,numpy,matplotlib,plot,wolfram-mathematica,Python,Numpy,Matplotlib,Plot,Wolfram Mathematica,我试图用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.040
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代码(我从中劫持)是:
这段python代码如下所示:
下面是我的问题/问题列表:
我喜欢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)
以下内容将使您更接近您想要的:
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()
默认情况下,可用颜色贴图的列表为。你需要一个白色开头的
如果这些都不符合您的需要,您可以尝试生成自己的,从查看开始。仅用于记录,在Mathematica 9.0中:
GraphicsGrid@{{MatrixPlot[l,
ColorFunction -> (ColorData["TemperatureMap"][Rescale[#, {Min@l, Max@l}]] &),
ColorFunctionScaling -> False], BarLegend[{"TemperatureMap", {0, Max@l}}]}}
有趣!非常感谢。然而,我试图弄明白:为什么颜色映射范围以
0.32结尾?为什么这个0.32
没有达到极限?看起来上次绘制的0.04
被省略了<代码>:P
将数据标准化为0.0-1.0范围,然后应用颜色贴图。默认情况下,数据的最大值映射为1.0,最小值映射为0.0。数据中的最大值为0.351894,因此这将是colormap的终点。您可以通过在调用pcolor
时指定vmin
和vmax
来更改此行为,例如plt.pcolor(数据,cmap='binary',vmin=0,vmax=0.4)
将在彩色地图上显示最后的0.4,但是你的最暗点不会像以前那样黑了。我确实尝试了vmin
和vmax
,但这向我抛出了一条错误消息。我会尝试复制它…是的!我知道了,谢谢你<代码>:)但是我在校外无法访问mma 9。我只能在校外使用mma 8…@drN,请注意,即使是Mathematica也没有按照您的建议将色条标记到最大值。它的行为与上面提供的Python解决方案非常相似。看起来您已经得到了答案,但您也可以考虑使用pcolormesh,它比pcolor快得多…@pelson谢谢!非常感谢您的评论<代码>:)我希望从mathematica转到python,在将mathematica“插值函数多项式”保存到离散数据以在python中使用时遇到了很大的困难<代码>:(
GraphicsGrid@{{MatrixPlot[l,
ColorFunction -> (ColorData["TemperatureMap"][Rescale[#, {Min@l, Max@l}]] &),
ColorFunctionScaling -> False], BarLegend[{"TemperatureMap", {0, Max@l}}]}}