【问题标题】:How to align xlabels of plot and colorbar如何对齐绘图和颜色条的 xlabels
【发布时间】:2021-11-07 10:05:35
【问题描述】:

我正在编写一个简单的函数来绘制二维数据。我想要颜色条 x 轴上的颜色条标签,与绘图的 xlabel 垂直对齐。这是一个 MWE:

from matplotlib import pyplot as plt


def plot2d(x, y, z, xlabel, ylabel, zlabel, ax=None, **pcm_kwargs):
    if ax is None:
        fig, ax = plt.subplots(constrained_layout=True)
    else:
        fig = ax.get_figure()
    ax.set_xlabel(xlabel)
    ax.set_ylabel(ylabel)

    pcm_kwargs.setdefault("shading", "auto")
    mesh = ax.pcolormesh(x, y, z, **pcm_kwargs)

    cb = fig.colorbar(mesh, ax=ax)
    cb.ax.set_xlabel(zlabel)

    fig.align_xlabels()
    return fig, ax


if __name__ == '__main__':
    import numpy as np
    x = np.linspace(0, 10, 100)
    y = np.linspace(0, 10, 100)
    z = np.random.random((100, 100))
    plot2d(x, y, z, xlabel="xlabel", ylabel="ylabel", zlabel="zlabel")
    plt.show()

第一个问题是constrained_layout=True 导致fig.colorbar 创建一个Axes 而不是AxesSubplot,所以fig.align_xlabels() 会抛出一个错误。但即使我删除constrained_layout=True,xlabel 和 zlabel 也不会垂直对齐:

.

我也试过直接设置标签的y位置:

fig.canvas.draw()
cb.ax.xaxis.label.set_y(ax.xaxis.label.get_position()[1])

但仍然没有效果。

如何垂直对齐绘图和颜色条 xlabels(如果可能,在 constrained_layout 内)?

【问题讨论】:

  • 您想在以下设置中实现什么? cb.ax.set_xlabel(zlabel, rotation=90)
  • 如果您希望 x 轴标签也垂直,请尝试以下操作。 ax.set_xlabel(xlabel, rotation=90)
  • 我不希望文本是横向的,我希望两个标签对齐,即在同一个 y 位置
  • 这就是你想要的方式。 cb.set_label(zlabel, loc='center')
  • 不,将标签放在颜色条的 y 轴上。

标签: python matplotlib


【解决方案1】:

所以我在刻度标签here 上遇到了类似的问题。我已经针对这个问题稍微调整了它,无论字体大小如何,这似乎都有效。我测试了 7-18 磅的字体。

cb = fig.colorbar(mesh, ax=ax)
r = plt.gcf().canvas.get_renderer()
coord = ax.xaxis.get_tightbbox(r)

xcoord = ax.xaxis.label.get_window_extent(renderer = r)
inv = ax.transData.inverted()
xcoord = inv.transform(xcoord)
xcoorddisplay = ax.transData.transform(xcoord)

cb.ax.set_xlabel(zlabel, labelpad = (xcoorddisplay[1][1]-xcoorddisplay[0][1])+8)

【讨论】:

    猜你喜欢
    • 2020-07-19
    • 2017-11-24
    • 2012-01-23
    • 1970-01-01
    • 2020-06-09
    • 2023-03-11
    • 1970-01-01
    • 2016-04-11
    • 2016-07-20
    相关资源
    最近更新 更多