【发布时间】:2018-12-07 13:40:14
【问题描述】:
以下代码
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()
对于线性情况(第一个图像),颜色栏中的每种颜色都存在于图像中,A 的最小值和最大值分别位于第一个和最后一个颜色箱中(从下到上)。
对于日志案例(第二张图片),颜色条的最小值和最大值对我来说不再有意义。 B 的最小值为 10^-26,因此该值位于颜色图的第一个和第二个颜色箱之间的边界,但图像中没有这两种第一种颜色。 B 的最大值是 10^-2,它位于 before-before last 和 before last 颜色 bin 之间的边界,因此可以在其中一个中考虑。 但是,为什么这里是最后一个(黄色)颜色箱,特别是因为图像中没有黄色?
所以我发现颜色图限制的默认行为(对于 LogLocator)很奇怪,因为它不代表真实(或至少是近似的)数据范围(如在线性情况下),并且它添加了颜色箱(在这种情况下 3 : 低于最小值 2,高于最大值 1),图像中不存在。
这是一个错误还是我不明白的地方?
@ImportanceOfBeingErnest 在下面的回答给出了我想要的输出,但我感觉我不应该这样做,而且我可以从具有线性值的颜色映射和 LogLocator 颜色映射器中获得相同的行为。
【问题讨论】:
标签: matplotlib colorbar