La mise en nouvelle ligne étiquette matplotlib avec TeX en Python?
-
27-09-2019 - |
Question
Comment puis-je ajouter une nouvelle ligne à l'étiquette d'un terrain (par exemple xlabel ou ylabel) dans matplotlib? Par exemple,
plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math \n continues here")
Idéalement, je voudrais l'y marquée soit centrée aussi. Y a-t-il un moyen de faire cela? Il est important que l'étiquette ont à la fois TeX (enfermé dans « $ ») et la nouvelle ligne.
La solution
Votre exemple est exactement comment il est fait, vous utilisez \n
. Vous devez enlever le préfixe r mais si python ne traite pas comme une chaîne brute
Autres conseils
Vous pouvez avoir le meilleur des deux mondes: automatique "fuite" des commandes LaTeX et retour à la ligne:
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$")
(au lieu d'utiliser trois lignes, la séparation des chaînes par des espaces simples est une autre option).
En fait, Python concaténer automatiquement les chaînes littérales qui se suivent, et vous pouvez mélanger les chaînes brutes (r"…"
) et les chaînes avec interpolation de caractères ("\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")
Il suffit de concaténer les cordes avec un saut de ligne qui ne sont pas sous forme de chaîne brute.
Le script python matplotlib suivant crée un texte avec une nouvelle ligne
ax.text(10, 70, 'shock size \n $n-n_{fd}$')
Ce qui suit n'a pas nouvelle ligne. Notez la r avant que le texte
ax.text(10, 70, r'shock size \n $n-n_{fd}$')