答案 0 :(得分:2)
在这种情况下,根本不使用ylabel
可能更容易。而是使用annotate
将文本放置在距离轴左侧不变的偏移处。
作为您的问题的一个例子:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=4, sharex=True)
yranges = [(-1000, 100), (-0.001, 0.002), (0, 5), (0, 20)]
labels = ['$P_{EUC}[mm]$', '$P_z[mm]$', '$P_Y[mm]$', '$P_X[mm]$']
for ax, yrange, label in zip(axes, yranges, labels):
ax.set(ylim=yrange, ylabel=label)
plt.show()
要解决此问题,最简单的方法是使用annotate
。诀窍是将文本放在y=0.5
的轴坐标中,然后从图的左边缘沿x方向 5个点。语法有点冗长,但相对容易阅读。关键在xycoords
和textcoords
kwargs控制xy
和xytext
的解释方式:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=4, sharex=True)
yranges = [(-1000, 100), (-0.001, 0.002), (0, 5), (0, 20)]
labels = ['$P_{EUC}[mm]$', '$P_z[mm]$', '$P_Y[mm]$', '$P_X[mm]$']
for ax, yrange, label in zip(axes, yranges, labels):
ax.set(ylim=yrange)
ax.annotate(label, xy=(0, 0.5), xytext=(5, 0), rotation=90,
xycoords=('figure fraction', 'axes fraction'),
textcoords='offset points', va='center', ha='left')
plt.show()
答案 1 :(得分:2)
您可以使用ax.yaxis.set_label_coords
更优雅地使用x坐标的常量值,如here所示。以你的例子:
import matplotlib.pyplot as plt
labels = ['$P_{EUC}[mm]$', '$P_z[mm]$', '$P_Y[mm]$', '$P_X[mm]$']
fig,axs=plt.subplots(4,1,sharex=True)
axs[0].set_ylim(-1000,0)
axs[1].set_ylim(-0.0010,0.0020)
axs[2].set_ylim(0,5)
axs[3].set_ylim(0,20)
[axs[i].set_ylabel(labels[i]) for i in range(4)]
labelx = -0.1 # Change this to suit your needs
[axs[i].yaxis.set_label_coords(labelx,0.5) for i in range(4)]
fig.savefig('labelx.png')
答案 2 :(得分:0)
您可以使用AxesSubplots上的set_ylabel方法偏移x和y标签。 http://matplotlib.org/api/axes_api.html?highlight=y%20label#matplotlib.axes.Axes.set_ylabel
您还可以格式化y刻度标记。 http://matplotlib.org/api/axes_api.html?highlight=y%20label#matplotlib.axes.Axes.set_yticklabels
使用matplotlib文本对象时,如果要遍历子图,可以使用参数)
来使用transform=ax.transAxes
坐标而不是Figure
坐标。
但我认为你所寻找的只是为了抵消它们。当文档稀疏时,使用Axes
来浏览命名空间。
dir()
fig, ax = plt.subplots(1, 1)
包括dir(ax)
。
yaxis
包括dir(ax.yaxis)
。
get_label
包括dir(ax.yaxis.get_label())
。
set_x
说:
help(ax.yaxis.get_label().set_x