web-dev-qa-db-fra.com

Mettre la nouvelle ligne dans l'étiquette matplotlib avec TeX en Python?

Comment puis-je ajouter une nouvelle ligne à l'étiquette d'un tracé (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 que le libellé y soit également centré. Y a-t-il un moyen de faire cela? Il est important que l'étiquette contienne à la fois TeX (entouré de '$') et la nouvelle ligne.

58
user248237

Votre exemple est exactement comment c'est fait, vous utilisez \n. Vous devez cependant retirer le préfixe r donc python ne le traite pas comme une chaîne brute

30
Michael Mrozek

Vous pouvez avoir le meilleur des deux mondes: "échappement" automatique des commandes LaTeX et sauts de 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ène automatiquement les littéraux de chaîne qui se suivent et vous pouvez mélanger des chaînes brutes (r"…") et des chaînes avec interpolation de caractères ("\n").

85
Eric O Lebigot
plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math" + "\n" + "continues here")

Concatène simplement les chaînes avec une nouvelle ligne qui n'est pas sous forme de chaîne brute.

11
Brothaman

Le script matplotlib suivant python crée du texte avec une nouvelle ligne

ax.text(10, 70, 'shock size \n $n-n_{fd}$')

Ce qui suit n'a pas de nouvelle ligne. Remarquez le r avant le texte

ax.text(10, 70, r'shock size \n $n-n_{fd}$')
2
Ranaivo