【发布时间】: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