gpt4 book ai didi

python - Matplotlib 颜色条仅显示最多一半的刻度值

转载 作者:行者123 更新时间:2023-12-01 23:59:25 27 4
gpt4 key购买 nike

当使用“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,...);然后将标签设置为 range(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]))

然后,您可以将刻度和刻度标签设置为刻度内的数字。

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

enter image description here

关于python - Matplotlib 颜色条仅显示最多一半的刻度值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47223288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com