2011-12-09 43 views
9

Quiero imprimir una etiqueta de eje: "Temperatura (℃)". ¿Cómo lo hago? Un fragmento es el siguiente:¿Cómo imprimo un símbolo Celsius con matplotlib?

# -*- coding: utf-8 -*- 
import matplotlib.pyplot as plt 
x = range(10,60,1) 
y = range(-100, 0, 2) 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot(x,y) 
ax.set_xlabel('Temperature (℃)') 

Por esa última línea que he intentado:

ax.set_xlabel('Temperature (℃)'.encode('utf-8')) 

ax.set_xlabel(u'Temperature (u\2103)') 

ax.set_xlabel(u'Temperature (℃)') 

ax.set_xlabel(u'Temperature (\u2103)') 

ax.set_xlabel('Temperature (\u2103)') 

Es sólo que no entiendo. Estoy usando spyder y ejecutando el código desde allí.

+1

¿Su código funciona si se ejecuta como un script fuera de spyder? – unutbu

+0

Ahh, lo intenté inicialmente, pero obtuve el mismo resultado que ejecutarlo desde spyder (debe haber sido una formulación incorrecta de todos modos). Debería haber intentado de nuevo con algunos de los otros que enumeré arriba. –

Respuesta

18

Uso del intérprete de látex para hacer el símbolo de grado.

ax.set_xlabel('Temperature ($^\circ$C)') 

He aquí los resultados:

enter image description here

+3

Creo que esta es la mejor solución para mí. También tiene la ventaja de hacer que mis etiquetas de figura coincidan con mi texto (yo uso LaTeX para composición tipográfica). En lugar de $^\ circ $ C, utilicé \ textcelsius. –

6
ax.set_xlabel(u'Temperature (℃)') 

debería funcionar:

enter image description here

In [56]: matplotlib.__version__ 
Out[56]: '1.0.1' 
+0

si el OP está usando una versión anterior de ipython, es posible que no funcione; hay algunos errores Unicode – wim

+0

oh, lo siento, está usando spyder – wim

+0

Parece que spyder no es compatible con utf-8. Ni siquiera puedo ingresar caracteres utf-8 usando el método de clave de composición "Ctrl + Shift + U". El editor de spyder simplemente lo ignora y entra en una 'U'. Estaba copiando el símbolo celsius desde la aplicación de mapas de caracteres de gnome. –

6

En vez de grado Celsius U + 2103 (℃), utilice el signo de grado U + 00B0 (°) seguido de la letra mayúscula. Esto es mucho más seguro por varias razones, incluida la cobertura de fuentes. También es el método recomendado en el Unicode Standard (15.2 Símbolos similares a letras, p.481).

1

O:

ax.set_xlabel(u'Temperature (\N{DEGREE SIGN}C)') 

Si desea hacerlo compatible con TeX y no TeX, entonces uno probablemente tiene que usar las dos maneras y prueba con if rcParams['text.usetex'] de antemano. Esto es how it's done in basemap por ejemplo.

0

actualización para los usuarios Spyder:

$^\ circ $ - trabajos!

\ {N} GRADO DE SIGNOS - me da el símbolo gamma minúsculas ...

3

para hacer este trabajo en matplotlib sin el intérprete de látex, utilice el formato Unicode Y la cadena de caracteres Unicode

from numpy import arange, cos, pi 
from matplotlib.pyplot import (figure, axes, plot, xlabel, ylabel, title, 
           grid, show) 
figure(1, figsize=(6,4)) 
ax = axes([0.1, 0.1, 0.8, 0.7]) 
t = arange(0.0, 1.0 + 0.01, 0.01) 
s = 3*cos(2*pi*t)+25 
plot(t, s) 

title('Average High Temperature') 
xlabel('Year') 
ylabel(u'Temp (\u00B0C)') 
grid(True) 
show() 

enter image description here

+0

Esto parece el mejor IMO; el LaTeX $ \ circ $ circle es demasiado pequeño. –

Cuestiones relacionadas