将ylabel与yticks对齐

时间:2014-03-07 20:51:01

标签: matplotlib

下面的代码绘制的图表看起来几乎就像我想要的那样。但是,我希望ylabel是水平的与yticks左对齐。目前,ylabel相对于看起来很丑的yticks左侧放置(下图显示了图的左上角)。有人知道如何解决这个问题吗?

import matplotlib.pyplot as plt
import numpy as np

xvals = range(0,10);
yvals = lambda s: [ x*x*s for x in xvals ]

# setting the x=... option does NOT help
yprops = dict(rotation=0, y=1.05, horizontalalignment='left')

plt.subplot(111,axisbg='#BBBBBB',alpha=0.1)
plt.grid(color='white', alpha=0.5, linewidth=2, linestyle='-', axis='y')

for spine_name in ['top', 'left', 'right']:
    plt.gca().spines[spine_name].set_color('none')

plt.ylabel('y label', **yprops)
plt.xlabel('x label')

plt.gca().tick_params(direction='out', length=0, color='k')

plt.plot(xvals, yvals(1), 'bo-', linewidth=2)
plt.gca().set_axisbelow(True)

plt.show()

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以使用this example中的ax.yaxis.set_label_coords调整坐标。

使用您的数据:

import matplotlib.pyplot as plt
import numpy as np

xvals = range(0,10);
yvals = lambda s: [ x*x*s for x in xvals ]

yprops = dict(rotation=0, x=0, y=1.05)

fig, ax = plt.subplots(1, 1, figsize=(5,3))

ax.set_ylabel('y label', **yprops )
ax.set_xlabel('x label')
ax.plot(xvals, yvals(1), 'bo-', linewidth=2)

print(ax.get_position())
ax.yaxis.set_label_coords(-0.1,1.05)

fig.savefig('cucu.png')

plt.show()

enter image description here

请注意,如果您走得更远,标签将放在外面图中。如果是这种情况,您可以在以下情况之前调整边距:

fig, ax = plt.subplots(1, 1, figsize=(5,3))

ax.set_ylabel('y label', **yprops )
ax.set_xlabel('x label')
ax.plot(xvals, yvals(1), 'bo-', linewidth=2)

fig.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8)
ax.yaxis.set_label_coords(-0.2,1.2)

fig.savefig('cucu2.png')

plt.show()

enter image description here

另见this answer