Podczas ustawiania xlabel parametr x
przyporządkowuje pozycję w jednostkach osi, więc 0 jest ori gin i 1 to prawa krawędź działki. y
jest ignorowany, ponieważ oczekuje się, że będzie wartością domyślną, tuż pod znacznikami.
Aby zmienić to zachowanie, można ustawić położenie w jednostkach osi, korzystając z Axis
method. Możesz użyć innych jednostek, również zapewniając transformację.
Oto przykład następująco:
import matplotlib.pyplot as plt
import numpy as np
ax = plt.gca()
ax.set_xticks(np.arange(0,6,1))
label = ax.set_xlabel('Xlabel', fontsize = 9)
ax.xaxis.set_label_coords(1.05, -0.025)
plt.savefig('labelAtEnd.png')
plt.show()
skutki:
wartość x (1,05) został wybrany do położenia etykiety na zewnątrz ramy osi. Wartość y (-0,025) została wybrana jako najlepsza domena do pożądanej pozycji. Korzystając z przekształcenia, możliwe jest automatyczne pozycjonowanie tekstu zgodnie z etykietami Tick
.
EDIT:
Oto rozszerzony przykład przy użyciu transformacji. Nie jest konieczne użycie ostatniej transformacji znacznika, ponieważ nie uwzględnia ona rozmiaru tekstu i jego wyrównania. Aby uzyskać nieco pożądany efekt, musiałem 1) użyć tego samego rozmiaru czcionki dla mojej etykiety x, 2) ustawić pionowe wyrównanie (va) na "górę", a 3) ustawić poziome wyrównanie na "lewo". Transformacja dla każdego tiku jest ustawiana dla jednostek danych dla x (ponieważ jest to xaxis) i jednostek osi dla y (0 do 1), ale przesunięta przez ustalone wypełnienie (w pikselach) od osi x.
import matplotlib.pyplot as plt
import numpy as np
ax = plt.gca()
ax.set_xticks(np.arange(0,6,1))
ax.set_yticks(np.arange(0,6,1))
label = ax.set_xlabel('xlabel', ha='left', va = 'top',)#fontsize = 9)
# need to draw the figure first to position the tick labels
fig = plt.gcf()
fig.draw(fig.canvas.get_renderer())
# get a tick and will position things next to the last one
ticklab = ax.xaxis.get_ticklabels()[0]
trans = ticklab.get_transform()
ax.xaxis.set_label_coords(5.1, 0, transform=trans)
plt.savefig('labelAtEnd2.png')
plt.show()
Wynika to z:
Czy mógłbyś podać przykład zastosowania transformacji? –
@Zhenya Dodałem przykład, ale okazało się, że nie jest to banalne. – Yann
dziękuję bardzo! – billyduc