【问题标题】:twinx messes up colorbar of pcolormesh plottwinx 弄乱了 pcolormesh 情节的颜色条
【发布时间】:2021-11-22 04:56:18
【问题描述】:

我在尝试在图像顶部绘制一些值时遇到了问题。问题是我无法真正正确放置彩条。正确地说,我的意思是我覆盖线图的图像。此线图的 y 轴应位于其标签的右侧,然后再往右应是图像的颜色条。

这是显示问题的简化代码:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable

image = np.random.randint(10, size=100).reshape(10, 10)

fig, ax = plt.subplots()

# ax2 = ax.twinx()  # -> Calling this messes up the colorbar
# ax2.plot(image.sum(0), 'r')  # what I actually want to do but not needed for the error

im = ax.pcolormesh(image)

cax = make_axes_locatable(ax).append_axes('right', size="5%", pad=0.4)
cbar = fig.colorbar(im, cax=cax)

您可以在下面看到ax2 = ax.twinx() 在颜色栏上的效果(我对图像的声誉不够,所以 stackoverflow 用链接替换了它)。

without ax2 = ax.twinx()

with ax2 = ax.twinx()

我尝试过make_axes_locatable(ax).append_axes() 以及与make_axes_locatable(ax).new_horizontal() 的组合,灵感来自这个问题的答案:Positioning the colorbar

查看fig.colorbar() 的文档,我找到了axcax 的参数,并与它们一起玩。他们做了很多,但不是我想要的。

我不知道我做错了什么,在互联网上找不到,我很感谢任何建议。

【问题讨论】:

    标签: python matplotlib colorbar twinx


    【解决方案1】:

    您是否尝试过使用 constrained_layout 的普通颜色条:

    import matplotlib.pyplot as plt
    import numpy as np
    
    image = np.random.randint(10,  size=100).reshape(10, 10)
    
    fig, ax = plt.subplots(constrained_layout=True)
    ax2 = ax.twinx()  
    ax2.plot(image.sum(0), 'r')  
    im = ax.pcolormesh(image)
    
    cbar = fig.colorbar(im, ax=ax)
    plt.show()
    

    【讨论】:

    • 不,我不知道它的存在。虽然它非常有用,而且它的工作方式与您展示的方式一样。但是有两个问题:1.它在文档中说“当前约束布局是实验性的。行为和 API 可能会发生变化,或者整个功能可能会在没有弃用期的情况下被删除。那么有没有办法在不使用此功能的情况下解决这个问题? 2. 它不适用于我定义“cax”的行。它不应该也有效吗?
    • constrained_layout 不会去任何地方——实验性只是意味着 API 可以改变。不,受约束的布局不适用于axes_divider。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2021-08-29
    • 2013-06-19
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多