2013-04-20 7 views
12

Chciałbym umieścić tekst w prawym dolnym rogu o równym współczynniku kształtu. Ustawiam pozycję względem figury przez ax.transAxes, , ale muszę ręcznie zdefiniować względną wartość współrzędnych w zależności od skali wysokości każdej z figur.Python/Matplotlib - Jak umieścić tekst w rogu o równym rozmiarze

Jaki byłby dobry sposób poznania skali wysokości osi i prawidłowej pozycji tekstu w skrypcie?

ax = plt.subplot(2,1,1) 
ax.plot([1,2,3],[1,2,3]) 
ax.set_aspect('equal') 
ax.text(1,-0.15, 'text', transform=ax.transAxes, ha='right', fontsize=16) 
print ax.get_position().height 

ax = plt.subplot(2,1,2) 
ax.plot([10,20,30],[1,2,3]) 
ax.set_aspect('equal') 
ax.text(1,-0.15, 'text', transform=ax.transAxes, ha='right', fontsize=16) 
print ax.get_position().height            

enter image description here

Odpowiedz

37

Zastosowanie annotate.

W rzeczywistości prawie nigdy nie używam text. Nawet gdy chcę umieścić dane we współrzędnych danych, zwykle chcę je przesunąć o pewną stałą odległość w punktach, co jest znacznie łatwiejsze z annotate.

Jako szybki przykład:

import matplotlib.pyplot as plt 

fig, axes = plt.subplots(nrows=2, subplot_kw=dict(aspect=1)) 

axes[0].plot(range(1, 4)) 
axes[1].plot(range(10, 40, 10), range(1, 4)) 

for ax in axes: 
    ax.annotate('Test', xy=(1, 0), xycoords='axes fraction', fontsize=16, 
       horizontalalignment='right', verticalalignment='bottom') 
plt.show() 

enter image description here

Jeśli chcesz to nieco odsunięty od narożnika, można określić przesunięcie przez xytext kwarg (i textcoords kontrolować, w jaki sposób wartości xytext są interpretowane). Jestem również za pomocą ha i va skróty do horizontalalignment i verticalalignment tutaj:

import matplotlib.pyplot as plt 

fig, axes = plt.subplots(nrows=2, subplot_kw=dict(aspect=1)) 

axes[0].plot(range(1, 4)) 
axes[1].plot(range(10, 40, 10), range(1, 4)) 

for ax in axes: 
    ax.annotate('Test', xy=(1, 0), xycoords='axes fraction', fontsize=16, 
       xytext=(-5, 5), textcoords='offset points', 
       ha='right', va='bottom') 
plt.show() 

enter image description here

Jeśli próbujesz umieścić go poniżej osi, można użyć offsetu, aby umieścić go zestaw odległości poniżej w punktach:

import matplotlib.pyplot as plt 

fig, axes = plt.subplots(nrows=2, subplot_kw=dict(aspect=1)) 

axes[0].plot(range(1, 4)) 
axes[1].plot(range(10, 40, 10), range(1, 4)) 

for ax in axes: 
    ax.annotate('Test', xy=(1, 0), xycoords='axes fraction', fontsize=16, 
       xytext=(0, -15), textcoords='offset points', 
       ha='right', va='top') 
plt.show() 

enter image description here

Aby uzyskać więcej informacji, zapoznaj się także z numerem Matplotlib annotation guide.

+0

To jest świetna odpowiedź i przykłady. Spróbuję użyć adnotacji zamiast tekstu. Dziękuję Ci bardzo. – Tetsuro

+0

Świetna odpowiedź! Dzięki! – HyperCube

Powiązane problemy