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

Python matplotlib更改超出colorbar范围的值的默认颜色,python,matplotlib,contour,color-mapping,colorbar,Python,Matplotlib,Contour,Color Mapping,Colorbar,当使用颜色填充网格时,例如在pyplot中使用轮廓函数时,我需要找到一种方法来更改pyplot用于填充超出颜色栏指定范围的数据的颜色。我希望有一个静态色条,它不会自动改变其范围以适应数据的最大/最小值,因此偶尔出现超出其边界的极值是不可避免的,需要为这些值指定颜色 超过颜色栏边界的值的默认颜色为白色,如果颜色贴图没有白色作为其结束颜色,则可能与周围数据发生明显冲突。示例图像如下所示-请注意,当值超过颜色栏的负范围时,会出现白色填充: 我相信有一种方法可以指定如果使用rcParams超出了每个界

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

超过颜色栏边界的值的默认颜色为白色,如果颜色贴图没有白色作为其结束颜色,则可能与周围数据发生明显冲突。示例图像如下所示-请注意,当值超过颜色栏的负范围时,会出现白色填充:

我相信有一种方法可以指定如果使用rcParams超出了每个界限,那么在每个界限上使用哪种颜色,但我在任何地方都找不到有关这方面的信息


任何帮助都将不胜感激。

可以使用colormap的
set\u over
set\u under
方法设置越界颜色;看见创建颜色贴图时,需要指定这些值。不过,我看不到任何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)
“扩展”论点是关键;它告诉contourf继续绘制所有等高线,但将给定范围之外的所有等高线折叠为“太大”和“太小”类别。
cs.set\u clim
调用是解决我在contourf中调试时发现的一个奇怪问题所必需的;由于某些原因,当您使用
extend
时,它会操纵数据限制,因此我们需要将它们重置回我们希望的状态


此外,就风格而言,您不应该在(cmap,color='k')下执行类似于
Colormap.set_的操作。这是调用类方法并显式地传入实例,这是一种奇怪的方式。只需执行
cmap。在(color=“k”)
下设置\u即可,但尝试使用这些方法时会出现问题。这里有一行代码在尝试它们之前是有效的:
cs=m.tourtf(x,y,data,clevs,cmap=pyplot.cm.spectrum)
这是我刚才尝试的:
cmap=matplotlib.colors.Colormap('spectrum')matplotlib.colors.Colormap.set_在(cmap,color=(0.4667,0,0.5333))cs=m.tourf(x,y,data,clevs,cmap=cmap)下
这会产生此错误:
文件“/usr/lib/pymodules/python2.7/matplotlib/contour.py”,第943行,在_process\u colors self.monology=self.cmap.monology AttributeError:Colormap实例没有“monology”属性。
您正在实例化基本Colormap类,创建一个新的空Colormap,而不使用“spectrum”彩色地图。做你想做的事情最简单的方法可能是做
cmap=pyplot.cm.spectrum
,然后在(…)
下做
cmap.set\u。这将修改光谱颜色贴图,使其具有指定的“下”值。请注意,由于您正在修改实际的Spectrum colormap对象,因此这将在使用Spectrum colormap的所有后续绘图上保持有效。这是有道理的,但使用这一点并不会更改生成的绘图,“上/下”颜色仍然为白色。在抽象中这样做太难了。您需要提供一些示例代码。此脚本尝试将“under”颜色设置为黑色而不是白色,但颜色栏下限以下的值仍然是白色。抱歉,我不知道如何在注释中很好地格式化多行代码<代码>从matplotlib导入pyplot作为plt从numpy导入arange,从matplotlib导入meshgrid.colors导入Colormap x,y=arange(-10,10),arange(-10,10)x,y=meshgrid(x,y)z=x**2+y**2 clevs=arange(50220,20)cmap=plt.cm.jet Colormap.set_在(cmap,color='k')=plt.contourf(x,y,y,z,clevs,cmap=cmap)plt.show()下设置