web-dev-qa-db-fra.com

Insertion d'un symbole de degré dans python plot

C'est un problème vraiment simple mais ça m'échappe. J'essaie juste d'insérer un symbole de degré dans les titres et légendes de mon graphique python. Le code est ci-dessous. Merci.

from numpy import *
import numpy as np
import matplotlib.pyplot as plt

theta1 = linspace(0,60,610)
theta2 = linspace(0,45,460)
theta3 = linspace(45,90,460)

CTS = 1/cos(radians(theta1))
CTS0 = 1/cos(radians(60-theta2))
CTS45 = 1/cos(radians(105-theta3))

plt.plot(theta1,CTS,label=u'CTS Head at 0',linewidth=2)
plt.plot(theta2,CTS0,label='CTS Head at 60',linewidth=2)
plt.plot(theta3,CTS45,label='CTS Head at 105',linewidth=2)

plt.xlabel('Manufactured Ply Angle (degrees)')
plt.ylabel('Thickness')

plt.legend( loc='lower right', numpoints = 1 )
plt.ylim([0,2.5])

plt.grid(b=None, which='major', axis='both')
plt.grid(color='k', linestyle='--', linewidth=0.5)
plt.axhline(y=1.035, xmin=0, xmax=90,color='k', linestyle='-', linewidth=1)

plt.show()
28
user2739143

Utilisez le style LaTeX. Par exemple: $^\circ$ Text Produirait °Text

Voir documentation matplotlib pour plus d'informations sur l'impression (en particulier l'expression mathématique).

Dans votre cas, le code doit être: plt.xlabel('Manufactured Ply Angle $^\circ$')

La partie TeX de l'expression doit être entourée des signes dollar "$".

37
Mailerdaimon

Utilisez les mathématiques LaTeX. Sur mon système, la meilleure apparence visuelle est obtenue avec

label = r'$45\degree$'

et il ressemble exactement aux étiquettes thêta par défaut d'un tracé polaire.

Comme d'autres l'ont souligné

  • label = r'$45^\circ$'
  • label = '$45^o$'

etc. fonctionnent aussi mais l'apparence visuelle n'est pas si bonne. Sur mon système, ces solutions de contournement rendent un symbole légèrement trop petit. YMMV, donc on peut vouloir essayer ce qui semble le mieux sur son système.

Par exemple, sur un tracé de contour polaire où le rayon est le sinus de l'angle zénithal, on peut vouloir utiliser

deg_labels = np.array([5, 10, 20, 30, 45, 60, 90])
ax.set_rgrids(np.sin(np.deg2rad(deg_labels)),     
              labels=(r"${:.0f}\degree$".format(_) for _ in deg_labels))
5
dadaist