Python Matplotlib颜色栏最多只显示一半的刻度值

Python Matplotlib颜色栏最多只显示一半的刻度值,python,matplotlib,Python,Matplotlib,当使用“ColorbarBase”对象创建颜色栏并使用“set_yticklabels”方法添加记号时,matplotlib最多只显示“记号”列表中指定值的一半。这只是在我升级到最新的matplotlib版本后才开始发生的 下面是测试它的简短代码: import matplotlib.pyplot as plt import matplotlib as mpl fig = plt.figure(1) cax = fig.add_axes([0.8, 0.15, 0

当使用“ColorbarBase”对象创建颜色栏并使用“set_yticklabels”方法添加记号时,matplotlib最多只显示“记号”列表中指定值的一半。这只是在我升级到最新的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的刻度的正确图形


我可以通过将刻度范围增加两个来进行肮脏的修复,但我更希望这种情况不会发生。有什么提示吗?

我认为上述代码在matplotlib 1.4中工作只是巧合。关键是你没有告诉颜色条它应该覆盖什么范围。因此,它将覆盖范围
0-1
。在2以下的matplotlib版本中,范围为
0-1
的轴将有11个记号(
0,0.1,0.2,…
);然后将标签设置为
范围(11)
将非常适合(0保持为0,0.1标记为1,等等)。在较新的matplotlib版本中,标签密度默认较低(
0,0.2,0.4,…
)。因此,最多只能获得5个标签(0保持为0,0.2标记为1,0.4标记为2,等等,最多5个)。最后,这种方法是非常脆弱的,因为蜱虫密度也受到轴的大小的影响,并且可能会发生变化

因此,您需要告诉颜色栏它应该覆盖哪个范围。一种方法是提供
标准

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()

谢谢您的回答!这适用于我的大部分代码。为什么只适用于大多数代码?我认为这是最普遍的。如果您需要进一步的澄清,您可以询问。你可能还想看。嘿,对不起,我发的邮件没有写完,没有时间更正。有一种情况,我想在最后一个记号中使用一个字符串来显示大于或等于号(例如“>=10”)。使用“plt.norm”会产生错误,因为它只适用于数字。在这种情况下,您的解决方案是否可行?您将保持一切不变,只需更改
cbar.ax.set\yticklabels(otherticks)
,其中otherticks在第一个或最后一个位置包含一些字符串。