【问题标题】:Matplotlib: Is there a way to get a colorbar axis from a parent axis?Matplotlib:有没有办法从父轴获取颜色条轴?
【发布时间】:2021-10-30 02:41:45
【问题描述】:

我正在做这样的情节:

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

fig = plt.gcf()
ax = plt.gca()
ax.pcolormesh(np.random.rand(10, 10))
fig.colorbar(mpl.cm.ScalarMappable(), ax=ax)

最后一行添加了一个颜色条和第二个轴

fig.axes
>>> [<AxesSubplot:>, <AxesSubplot:label='<colorbar>'>]

我的问题: 仅使用 ax = plt.gca() 返回的轴(上面列表中的第一个返回),两个轴之间是否有任何关系可用于获取颜色条的轴(上面列表中的第二个)?

【问题讨论】:

    标签: python matplotlib data-visualization visualization colorbar


    【解决方案1】:

    据我所知,如果您这样定义 pcolormeshcolorbar,则不会。
    无论如何,您可以预先为pcolormesh 定义一个ax,为colorbar 定义一个cax。然后您可以将cax 作为参数传递给matplotlib.pyplot.colorbar。这样你就可以根据需要访问axcax这两个轴了。

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    grid_kws = {'width_ratios': (0.9, 0.05), 'wspace': 0.2}
    fig, (ax, cax) = plt.subplots(1, 2, gridspec_kw = grid_kws, figsize = (10, 8))
    ax.pcolormesh(np.random.rand(10, 10))
    plt.colorbar(mpl.cm.ScalarMappable(), cax=cax)
    
    plt.show()
    


    一般来说,专注于您的代码:

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.gcf()
    ax = plt.gca()
    ax.pcolormesh(np.random.rand(10, 10))
    fig.colorbar(mpl.cm.ScalarMappable(), ax=ax)
    

    ax开始,你可以通过ax.figure得到它的身影。从那里,您可以使用ax.figure.axes 获取所有图形轴的列表。所以,如果你想只使用 pcolormesh' 轴来获取 colobar 的轴,你应该使用:

    ax.figure.axes[1]
    

    据我所知,父图形是两个轴之间的唯一关系。

    【讨论】:

    • 感谢您的回复。我知道这种可能性,但正在寻找在更大范围内获取颜色条轴的具体解决方案
    • 再次感谢。虽然使用 ax.figure.axes[1] 适用于简单的情况。对于更复杂的子图布局,它可能会失败。所以除了手动跟踪两个轴之外,没有通用的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多