为什么我的等高线图的一部分显示为白色?
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")
通过这样做,您指示模块根据最高(/最低)填充轮廓绘制较高(/较低)值。
如果只想在较低或较高范围内扩展,可以将关键字参数更改为
扩展=“最小”或扩展==最大
我正在使用 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")
通过这样做,您指示模块根据最高(/最低)填充轮廓绘制较高(/较低)值。 如果只想在较低或较高范围内扩展,可以将关键字参数更改为
扩展=“最小”或扩展==最大