为什么我的等高线图的一部分显示为白色?

Why is part of my contour plot showing white?

我正在使用 Python 的 matplotlib.pyplot.contourf 创建带有颜色条的数据等值线图。我已经无数次成功地做到了这一点,即使是使用相同变量的其他层也是如此。然而,当值变小时(大约 1E-12),部分轮廓显示为白色。白色也不会出现在颜色条中。有谁知道是什么原因造成的以及如何解决这个问题?下面附上错误的轮廓。

a1 = plt.contourf(np.linspace(1,24,24),np.linspace(1,20,20),np.transpose(data[:,:,15]))
plt.colorbar(a1)
plt.show()

tl;博士

根据新信息,matplotlib 无法为您的数据设置正确的级别数(see parameters 在文档中),导致数据未绘制。要解决这个问题,您需要告诉 matplotlib 使用 plt.contourf(..., extend="max")plt.contourf(..., extend="both")

扩展限制

详尽的回答

contourf() 显示带有 colormap that doesn't include white 的白色区域有几个原因。

NaN 值

从不绘制 NaN 值。

屏蔽数据

如果您在绘图前屏蔽数据,它将不会出现在绘图中。但是你应该知道你是否屏蔽了你的数据。

尽管如此,如果您使用 Tick locator = LogLocator().

之类的东西,您可能会忽略您的数据

Matplotlib 无法为您的数据设置正确的级别

有时 matplotlib 没有设置正确的水平,导致您的一些数据没有绘图。

要解决此问题,您可以使用 plt.contourf(..., extend=EXTENDS),其中 EXTENDS 可以是 "neither", "both", "min", "max"

粗格

请注意,如果 X 和 Y 向量数据点的间距不等,图中也会出现白色部分。在那种情况下最好使用函数 tricontourf().

我最近遇到了同样的问题,当时可用的数据甚至 higher/lower 比我设置的水平还要多。因此,plt.contourf 填充了您专门给出的等高线,它忽略了数据中存在的任何其他更高或更低的值。 我通过添加一个关键字参数 extend="both" 解决了这个问题,对于您的情况,它是这样的:

a1 = plt.contourf(np.linspace(1,24,24),np.linspace(1,20,20),np.transpose(data[:,:,15]), extend="both")

或一般形式:

a1 = plt.contourf(x,y,variable[:,:,15],extend="both")

通过这样做,您指示模块根据最高(/最低)填充轮廓绘制较高(/较低)值。 如果只想在较低或较高范围内扩展,可以将关键字参数更改为

扩展=“最小”或扩展==最大