Используя matplotlib, как мне отбелить фон метки оси? - PullRequest
3 голосов
/ 04 июня 2011

Есть ли способ отбелить фон метки оси, чтобы при пересечении самой линии оси последняя не проходила через нее?

Например, этот скрипт (лучший из тех, что мне удавалось до сих пор)

#!/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()

производит почти то, что я ищу, но ось у все еще проходит над меткой: the y-axis label.

Ответы [ 2 ]

2 голосов
/ 04 июня 2011

По умолчанию левый отдел позвоночника имеет 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

0 голосов
/ 04 июня 2011

Помогает ли вам эта ссылка? http://matplotlib.sourceforge.net/faq/howto_faq.html#automatically-make-room-for-tick-labels Вы можете просто сдвинуть ось y вправо, чтобы некоторое пространство для метки $ S (\ mathbf {Q}) L ^ {1+ \ eta} $ было полностью помещено перед линией оси.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...