如何旋转次级y轴标签以避免与y刻度重叠,matplotlib

10

我试图将我的次要y标签旋转270度,但是当我传递rotate=270参数时,它会与我的y刻度文本重叠。有什么解决办法吗?

fig, ax = plt.subplots()

ax.plot(df.index,df.tripTime,label='Fishing Effort', marker='D')
ax2=ax.twinx()
ax2.plot(tr.index,tr.cost, 'g',label='Fuel Expenditure', marker='d')

lines = ax.get_lines() + ax2.get_lines()
ax.legend(lines,[line.get_label() for line in lines], loc='lower left')
ax.set_ylim((0, 18))

ax2.set_ylabel('Cost ($)',color='g', rotation=270)

for tl in ax2.get_yticklabels():
    tl.set_color('g')

ax.set_ylabel('Fishing Effort (hrs)')
ax.set_xlabel('Time (days)')
plt.show()

enter image description here

1个回答

13

更新:这个答案不太好,请查看评论!

看起来像是一个错误,你应该向 matplotlib问题追踪器 报告。

在修复之前,一个快速的解决方案是将标签填充设置为更高的值:

ax2.set_ylabel('Cost ($)', color='g', rotation=270, labelpad=15)

结果

此外,负的labelpad值也可以用来减少空白间隔。


任何遇到此问题的人,可以在以下链接中查看Github问题:https://github.com/matplotlib/matplotlib/issues/5920 - smheidrich
2
tacaswell 在问题跟踪器上指出,正确的解决方案是在调用 set_ylabel 时为新旋转设置适当的垂直对齐方式,即在此处使用 va='bottom' - smheidrich
我希望我能多次点赞这个。你不知道我已经尝试了多久来解决这个问题。 - TravisJ
@TravisJ 我在这个回答中提供的解决方案并不正确。请参考 tacaswell 在 bug tracker 上提供的解决方案,使用“va='bottom'”- 这才是正确的方式。 - smheidrich
@pmos,谢谢。我确实使用了评论中的建议。我建议您在回答中包含评论,而不是引用读者的评论。这样,如果评论被删除(无论出于什么原因),内容仍然可用。此外,编辑答案的目的是使其更好-因此,当您学到新知识时,请将其编辑到您的答案中,并使自己的答案更好。 - TravisJ
1
在我的情况下,我正在使用右侧的y轴标签,它不是一个次要轴。也就是说,我正在使用plt.gca().yaxis.set_label_position("right")。对于任何人来说,这需要在plt.gca().set_ylabel("...", rotation=270, va="bottom")之前完成。 - jamesdlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接