5

我正在尝试使用 matplotlib(当然还有 numpy)绘制轮廓图。它有效,它绘制了它应该绘制的内容,但不幸的是我无法设置颜色条范围。问题是我有很多地块并且需要它们都具有相同的颜色条(相同的最小值和最大值,相同的颜色)。我复制并粘贴了我在互联网上找到的几乎所有代码片段,但没有成功。到目前为止我的代码:

    import numpy as np;
    import matplotlib as mpl;
    import matplotlib.pyplot as plt;
    [...]
    plotFreq, plotCoord = np.meshgrid(plotFreqVect, plotCoordVect);

    figHandler = plt.figure();
    cont_PSD = plt.contourf(plotFreq, plotCoord, plotPxx, 200, linestyle=None);


    normi = mpl.colors.Normalize(vmin=-80, vmax=20);

    colbar_PSD = plt.colorbar(cont_PSD);
    colbar_PSD.set_norm(normi);
    #colbar_PSD.norm = normi;
    #mpl.colors.Normalize(vmin=-80, vmax=20);

    plt.axis([1, 1000, -400, 400]);

如您所见,颜色条规范有三种不同的行,它们都不起作用。范围仍然是自动设置的......我的意思是其他一切都在工作,为什么不是颜色条?我什至没有收到错误或警告。

谢谢,itpdg

编辑 1:图片,带有 plt.clim(-80,20):

在此处输入图像描述

4

3 回答 3

2

不久前我遇到了这个问题,并认为这是一个错误(请参阅MPL 问题 #5055)。不是,但它确实需要使用extendkwarg,这对我来说是不直观的。这是您想要执行的操作:

normi = mpl.colors.Normalize(vmin=-80, vmax=20)

cont_PSD = plt.contourf(plotFreq, plotCoord, plotPxx,
                        np.linspace(-80, 20, 200),
                        linestyle=None,
                        norm=normi, extend='both')

plt.colorbar(colbar_PSD)

您可以取消plt.clim,colbar_PSD.set_norm和其他类似的调用。

此处extend=提供了更多使用示例。

请注意,这将在顶部和底部创建一个带有“三角形”的颜色条,表示数据超出了颜色条,但我认为一旦你习惯了它们,你就会喜欢它们,它们是描述性的。

祝你好运!

于 2016-02-22T22:42:43.963 回答
2

请用户levels参数,一组例子:

In [9]:

ndom
z = np.random.random((10,10))

没有levels,颜色条将自动缩放

In [11]:
plt.contourf(z)
plt.colorbar()
Out[11]:
<matplotlib.colorbar.Colorbar at 0x120d47390>

在此处输入图像描述

In [12]:
plt.contourf(z*2)
plt.colorbar()
Out[12]:
<matplotlib.colorbar.Colorbar at 0x120f6ac10>

在此处输入图像描述

使用显式控制颜色条levels

In [13]:
plt.contourf(z*2, levels=np.linspace(0,2,20))
plt.colorbar()
Out[13]:
<matplotlib.colorbar.Colorbar at 0x121b119d0>

在此处输入图像描述

In [14]:
plt.contourf(z, levels=np.linspace(0,2,20))
plt.colorbar()
Out[14]:
<matplotlib.colorbar.Colorbar at 0x120dc3510>

在此处输入图像描述

于 2016-02-22T16:51:40.703 回答
1

在之后添加plt.colorbar()

plt.clim(minimal_value, maximal_value)

对于等高线图,添加参数 vmin 和 vmax:

cont_PSD = plt.contourf(plotFreq, plotCoord, plotPxx, 200, linestyle=None,vmin=minimal_value,vmax=maximal_value)

你完整的代码应该像这样工作:

import numpy as np;
import matplotlib as mpl;
import matplotlib.pyplot as plt;
[...]
plotFreq, plotCoord = np.meshgrid(plotFreqVect, plotCoordVect);

figHandler = plt.figure();
cont_PSD = plt.contourf(plotFreq, plotCoord, plotPxx, 200, linestyle=None,vmin=minimal_value,vmax=maximal_value);


plt.colorbar()
plt.clim(minimal_value,maximal_value)
plt.show()
于 2016-02-22T15:07:43.977 回答