matplotlib 如何在imshow()的colorbar上添加线条

zfycwa2u  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(133)

基本上,我找到了these关于如何在colorbar上添加自定义线条或点的说明,但我的代码什么也没发生。
我试着改变zorder,或者切换到pyplot风格,但仍然无法让它工作。

fig, ax = plt.subplots()
im = ax.imshow(data, cmap='rainbow')

cbar = ax.figure.colorbar(im)
cbar.outline.set_visible(False)
cbar.ax.set_ylabel("α", rotation=0, va="bottom")
# None of them does anything
cbar.ax.plot(0.5, 0.5, 'k.', label="Ref")
cbar.ax.plot(0.5, 3, 'k.', label="Ref")
cbar.ax.plot([0, 1], [3, 3], 'k', label="Ref")

到目前为止,数字看起来像this
我用的是matplotlib 3.1.1

ibrsph3r

ibrsph3r1#

Matplotlib会将颜色条的x和y限制设置为相同的值。因此,如果颜色条的y限制为1.8和7.2,则x限制也是如此。您需要在这些限制内绘图才能看到标记。
使用axhline可能比使用plot绘制一条线更容易。要标记此标记值,您可以将其添加到颜色条标记和标记标签中。

# clim = cbar.ax.get_ylim()          # find axis limits
# cbar.ax.plot(mean(clim), 3, 'k.')  # point at 3 in the middle of x axis
cbar.ax.axhline(y=3, c='w')          # line at 3

# Set label
original_ticks = list(cbar.get_ticks())
cbar.set_ticks(original_ticks + [3])
cbar.set_ticklabels(original_ticks + ['Ref'])

7y4bm7vi

7y4bm7vi2#

在这种情况下,您可能需要annotate而不是plot。您在plot调用中指定的标签将不会显示,直到legend()调用,即使在这种情况下,图例也不会显示在您想要的位置。

fig, ax = plt.subplots()
im = ax.imshow(np.random.normal(size=100).reshape(10, 10), cmap='rainbow')

cbar = ax.figure.colorbar(im)
cbar.outline.set_visible(False)
cbar.ax.set_ylabel("α", rotation=0, va="bottom")
cbar.ax.annotate('Ref', (0, 0))

相关问题