Mettere a capo in etichetta matplotlib con TeX in Python?
-
27-09-2019 - |
Domanda
Come posso aggiungere una nuova linea per l'etichetta di una trama (per esempio xlabel o ylabel) in matplotlib? Ad esempio,
plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math \n continues here")
Idealmente mi piacerebbe y-etichettati per essere centrata anche. C'è un modo per fare questo? E 'importante che l'etichetta c'hanno TeX (racchiuso in '$') e il ritorno a capo.
Soluzione
Il tuo esempio è esattamente come è fatto, si usa \n
. È necessario togliere il prefisso r anche se così pitone non lo tratta come una stringa grezza
Altri suggerimenti
Si può avere il meglio dei due mondi: automatico "fuga" di LaTeX comandi e nuove righe:
plt.ylabel(r"My long label with unescaped {\LaTeX} $\Sigma_{C}$ math"
"\n" # Newline: the backslash is interpreted as usual
r"continues here with $\pi$")
(invece di utilizzare tre linee, separando le stringhe di singoli spazi è un'altra opzione).
In realtà, Python concatena automaticamente stringhe letterali che si susseguono, e si può mescolare le stringhe prime (r"…"
) e stringhe con interpolazione carattere ("\n"
).
plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math" + "\n" + "continues here")
Proprio concatenare le stringhe con una nuova riga che non è in forma di stringa grezza.
Il seguente script python matplotlib crea il testo con la nuova linea
ax.text(10, 70, 'shock size \n $n-n_{fd}$')
Di seguito non ha nuova linea. Si noti la r prima del testo
ax.text(10, 70, r'shock size \n $n-n_{fd}$')