使用matplotlib,如何美化轴标签的背景?

时间:2011-06-04 10:39:48

标签: python matplotlib

有没有办法可以使轴标签的背景变白,这样当它穿过轴线本身时,后者不会穿过它?

例如,这个脚本(我迄今为止管理得最好)

#!/usr/bin/python 
import matplotlib.pyplot as plt

xx=[1,2,3]
yy=[2,3,4]
dy=[0.1,0.2,0.05]

fig=plt.figure()
ax=fig.add_subplot(111)

ax.errorbar(xx,yy,dy,fmt='ro-',ms=6,elinewidth=4)

ax.set_xlim([0.,3.4])
ax.set_ylim([0.,4.4])

ax.set_xlabel(r'$T/t$',fontsize=16)
ax.set_ylabel(r'$S(\mathbf{Q})L^{1+\eta}$',fontsize=16)

# position the axis labels
ax.xaxis.set_label_coords(1,0)
ax.yaxis.set_label_coords(0.1,0.93)
ax.yaxis.get_label().set_rotation('horizontal')
ax.yaxis.get_label().set_backgroundcolor('w')
#ax.yaxis.get_label().set_zorder(222)  #doesn't do the trick

plt.show()

几乎产生了我正在寻找的东西,但y轴仍然在标签上运行:the y-axis label

2 个答案:

答案 0 :(得分:2)

默认情况下,左侧脊椎的zorder为2.5。出于某种原因,这似乎会引起问题;也许代码中有些东西只有在它们是不可分割的情况下才有效?无论如何,如果你添加

ax.spines['left'].set_zorder(2)

或更一般地

ax.spines['left'].set_zorder(ax.yaxis.get_label().get_zorder()-1)
演出前,它应该工作。此外,set_ylabel返回ylab对象本身,因此如果你使用“ylab = ax.set_ylabel(stuff)”,你可以避免以后所有的ax.yaxis.get_label()调用。

example of box dominating spine

答案 1 :(得分:0)

此链接有助于您吗? http://matplotlib.sourceforge.net/faq/howto_faq.html#automatically-make-room-for-tick-labels 您可以简单地将y轴向右移动以允许$ S(\ mathbf {Q})L ^ {1+ \ eta} $标记的一些空间完全放置在轴线之前。