Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于出版物质量绘图的Python Pylab pcolor选项_Python_Numpy_Matplotlib_Plot_Wolfram Mathematica - Fatal编程技术网

用于出版物质量绘图的Python Pylab pcolor选项

用于出版物质量绘图的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

我试图用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代码(我从中劫持)是:

这段python代码如下所示:

下面是我的问题/问题列表: 我喜欢python如何绘制这一点,并希望使用这一点,但

  • 我如何使所有代表“0”的“蓝色”像在mathematica绘图中一样消失
  • 如何旋转绘图以使明亮的红色斑点位于左上角
  • 我设置“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)
    

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

    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}}]}}