Czy istnieje prosty sposób na umieszczenie etykiety osi Y po prawej stronie wykresu? Wiem, że można to zrobić dla etykiet tików przy użyciu ax.yaxis.tick_right()
, ale chciałbym wiedzieć, czy można to zrobić również dla etykiety osi.
Pomysł, który przyszedł mi do głowy, to użycie
ax.yaxis.tick_right()
ax2 = ax.twinx()
ax2.set_ylabel('foo')
Jednak nie daje to pożądanego efektu umieszczania wszystkich etykiet (znaczników i etykiet osi) po prawej stronie, przy jednoczesnym zachowaniu zasięgu osi y. Krótko mówiąc, chciałbym mieć sposób na przeniesienie wszystkich etykiet osi Y od lewej do prawej.
python
matplotlib
labels
apdnu
źródło
źródło
rhs = lambda ax: (ax.yaxis.set_label_position("right"), ax.yaxis.tick_right())
Jeśli chcesz postępować zgodnie z przykładem podanym w
matplotlib
i utworzyć figurę z etykietami po obu stronach osi, ale bez konieczności korzystania zsubplots()
funkcji, oto moje rozwiązanie:from matplotlib import pyplot as plt import numpy as np ax1 = plt.plot() t = np.arange(0.01, 10.0, 0.01) s1 = np.exp(t) plt.plot(t,s1,'b-') plt.xlabel('t (s)') plt.ylabel('exp',color='b') ax2 = ax1.twinx() s2 = np.sin(2*np.pi*t) ax2.plot(t, s2, 'r.') plt.ylabel('sin', color='r') plt.show()
źródło
File "prueba.py", line 11, in <module>
ax2 = ax1.twinx()
AttributeError: 'list' object has no attribute 'twinx'
ax1 = plt.subplot()
(przepraszam za wskrzeszenie pytania)
Wiem, że to brudna sztuczka, ale jeśli nie chcesz schodzić do obsługi osi i pozostać w
plt
poleceniach, możesz użyćlabelpad
argumentu skalarnego, aby umieścić etykietę po prawej stronie wykresu. Działa po kilku próbach i błędach, a dokładna wartość skalarna prawdopodobnie (?) Ma związek z wymiarami rozmiaru twojej figury.Przykład:
# move ticks plt.tick_params(axis='y', which='both', labelleft=False, labelright=True) # move label plt.ylabel('Your label here', labelpad=-725, fontsize=18)
źródło
Poprzednie odpowiedzi są nieaktualne. Oto najnowszy kod z powyższego przykładu:
import numpy as np import matplotlib.pyplot as plt t = np.arange(0.01, 10.0, 0.01) data1 = np.exp(t) data2 = np.sin(2 * np.pi * t) fig, ax1 = plt.subplots() color = 'tab:red' ax1.set_xlabel('time (s)') ax1.set_ylabel('exp', color=color) ax1.plot(t, data1, color=color) ax1.tick_params(axis='y', labelcolor=color) ax2 = ax1.twinx() # instantiate a second axes that shares the same x-axis color = 'tab:blue' ax2.set_ylabel('sin', color=color) # we already handled the x-label with ax1 ax2.plot(t, data2, color=color) ax2.tick_params(axis='y', labelcolor=color) fig.tight_layout() # otherwise the right y-label is slightly clipped plt.show()
Od tutaj .
źródło