使用" ColorbarBase"创建彩条时对象并使用" set_yticklabels"添加刻度线方法matplotlib只显示" ticks"中指定的值的一半。名单。这只是在我升级到最新的matplotlib版本后才开始发生的。
这是一个测试它的简短代码:
import matplotlib.pyplot as plt
import matplotlib as mpl
fig = plt.figure(1)
cax = fig.add_axes([0.8, 0.15, 0.03, 0.72])
ticks = range(11)
cbar = mpl.colorbar.ColorbarBase(cax, cmap='rainbow', orientation='vertical')
cbar.ax.set_yticklabels(ticks)
plt.show()
使用matplotlib版本2.1.0我得到一个带有从1到5的刻度的颜色条,同时使用matplotlib版本1.4.3我得到正确的数字,刻度从1到10。
我可以通过将蜱范围增加2来做一个肮脏的修复,但我宁愿这不会发生。关于可能发生什么的任何提示?
答案 0 :(得分:0)
我认为上面的代码在matplotlib 1.4中工作只是巧合。关键是你没有告诉colorbar它应覆盖的范围。因此它将覆盖范围0 - 1
。在2以下的matplotlib版本中,范围为0 - 1
的轴将具有11个刻度线(0,0.1,0.2,...
);然后将标签设置为range(11)
将很好地适合(0保持0,0.1标记为1,等等)。在较新的matplotlib版本中,标签密度默认较低(0,0.2,0.4,...
)。因此,您只能获得最多5个标签(0保持0,0.2标记为1,0.4标记为2,等等最多为5)。最后,这种方法非常脆弱,因为刻度密度也受轴的大小影响,可能会发生变化。
所以你想告诉colorbar它应该涵盖哪个范围。一种方法是提供norm
。
ticks = range(11)
cbar = mpl.colorbar.ColorbarBase(cax, cmap='rainbow', orientation='vertical',
norm=plt.Normalize(ticks[0],ticks[-1]))
然后,您可以将刻度线和刻度标签设置为ticks
内的数字。
cbar.set_ticks(ticks)
cbar.ax.set_yticklabels(ticks)
完整示例:
import matplotlib.pyplot as plt
import matplotlib as mpl
fig = plt.figure(1)
cax = fig.add_axes([0.8, 0.15, 0.03, 0.72])
ticks = range(11)
cbar = mpl.colorbar.ColorbarBase(cax, cmap='rainbow', orientation='vertical',
norm=plt.Normalize(ticks[0],ticks[-1]))
cbar.set_ticks(ticks)
cbar.ax.set_yticklabels(ticks)
plt.show()