Python matplotlib更改超出颜色条范围的值的默认颜色

时间:2012-07-08 19:37:04

标签: python matplotlib contour color-mapping colorbar

当使用颜色填充网格时,例如在pyplot中使用contourf时,我需要找到一种方法来更改pyplot用于填充超出颜色条指定范围的数据的颜色。我希望有一个静态颜色条不会自动更改其范围以适应数据的最大/最小值,因此偶尔会超出其边界的极值是不可避免的,并且需要为这些值指定颜色。

超出颜色条边界的值的默认颜色为白色,如果颜色图的最终颜色不是白色,则可能会与周围数据发生明显冲突。示例图像如下所示 - 当值超出颜色条的负范围时,请注意白色填充:

enter image description here

我相信有一种方法可以指定在每个边界使用哪种颜色,如果超过它们使用rcParams,但我无法在任何地方找到相关信息。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:28)

可以使用色彩映射的set_overset_under方法设置越界颜色;见the documentation。创建色彩映射时,您需要指定这些值。但是,我没有看到任何matplotlibrc设置为此设置默认设置。您可能还想在matplotlib邮件列表上询问。

编辑:我看到发生了什么。您描述的白色区域不超出颜色范围的限制。它只是轴的空白背景。由于您只绘制某些级别,因此根本不会绘制该范围之外的任何级别,将这些区域留空。为了得到你想要的,做到这一点:

cs = pyplot.contourf(x,y,z,levels=np.arange(50, 220, 20), cmap=pyplot.cm.jet, extend="both")
cs.cmap.set_under('k')
cs.set_clim(50, 210)
cb = pyplot.colorbar(cs)

“extend”参数是关键;它告诉contourf继续绘制所有轮廓,但是将给定范围之外的所有轮廓折叠成“太大”和“太小”的类别。 cs.set_clim调用是必要的,以解决我在contourf中发现的奇怪问题,同时调试它;出于某种原因,当您使用extend时,它会操纵数据限制,因此我们需要将它们重置为我们想要的状态。

另外,就风格问题而言,你不应该做Colormap.set_under(cmap,color='k')之类的事情。这是调用类方法并显式传递实例,这是一种奇怪的方法。只需cmap.set_under(color="k")