使用LogLocator

时间:2018-12-07 13:40:14

标签: matplotlib colorbar

以下代码

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import ticker

n = 50
A = np.tile(np.linspace(-26,-2,n),(n,1))
plt.figure()
plt.contourf(A)
plt.colorbar()

B = np.tile(np.logspace(-26,-2,n),(n,1))
plt.figure()
plt.contourf(B,locator=ticker.LogLocator())
plt.colorbar()

plt.show()

生成以下两个图: enter image description here enter image description here

对于线性情况(第一个图像),图像中会显示颜色栏中的每种颜色,而A的最小值和最大值分别位于第一个和最后一个色块中(从下到上)。

对于原木案例(第二张图片),颜色条的最小值和最大值对我而言不再有意义。 B的最小值是10 ^ -26,因此此值位于颜色图的第一和第二颜色容器之间的边界,但是图像中这两个第一颜色均不存在。 B的最大值为10 ^ -2,它位于前-后-前和前-后颜色框之间的边界,因此可以在任何一个中进行考虑。 但是,为什么这里最后一个(黄色)颜色容器是特别是因为图像中没有黄色?

因此,我发现颜色映射限制(对于LogLocator)的默认行为很奇怪,因为它不代表真实(或至少近似)数据范围(如在线性情况下),并且添加了色块(在这种情况下,图片中不存在3:2(低于最小值)和1(高于max)。

这是一个错误还是有我不理解的东西?

@ImportanceOfBeingErnest下面的答案给出了我想要的输出,但是感觉就像我不需要这样做,并且我可以期望带有线性值的色图和LogLocator颜色映射器的行为相同。 / p>

1 个答案:

答案 0 :(得分:0)

如果要在轮廓图中有特定的间隔,则需要确定它们,并通过levels参数将其提供给轮廓函数。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import ticker

n = 50
A = np.tile(np.logspace(-26,-2,n),(n,1))
levels = 10.**np.arange(-26,-1,4)
plt.figure()
plt.contourf(A,levels=levels, locator=ticker.LogLocator())
plt.colorbar()
plt.show()

enter image description here