Caracteres no ASCII en Matplotlib

Tengo un problema al mostrar caracteres no ASCII en Matplotlib, estos caracteres se representan como cajas pequeñas en lugar de una fuente adecuada, parece que (llené estas cajas con pintura roja para resaltarlas):

Aquí está la imagen que muestra el problema.

¿Cómo lo arreglo?

Una pregunta relacionada es Acentuados personajes en Matplotlib .

Este problema puede en realidad tener un par de causas diferentes:

La fuente por defecto no incluye estos glifos.

Puede cambiar la fuente predeterminada utilizando lo siguiente (¡antes de que se realice cualquier trazado!)

matplotlib.rc('font', family='Arial') 

En algunas versiones de matplotlib tendrás que configurar la familia:

 matplotlib.rc('font', **{'sans-serif' : 'Arial', 'family' : 'sans-serif'}) 

(Tenga en cuenta que debido a que sans-serif contiene un guión dentro de la syntax **{} , en realidad es necesario).

El primer comando cambia la familia de fonts sans-serif para que contenga solo una fuente (en mi caso, era Arial ), el segundo establece la familia de fonts predeterminada en sans-serif .

Otras opciones están incluidas en la documentación .

Has creado / pasado incorrectamente objetos de cadena a Matplotlib

Incluso si la fuente contiene glifos adecuados, si olvidó usar u para crear constantes de Unicode , Matplotlib tendrá este comportamiento:

 plt.xlabel("Średnia odległość między stacjami wsparcia a modelowaną [km]") 

Así que necesitas agregar u :

 plt.xlabel(u"Średnia odległość między stacjami wsparcia a modelowaną [km]") 

Otra causa es que se olvidó de poner un comentario mágico UTF-8 en la parte superior del archivo (leí que esta podría ser la fuente del problema ):

 # -*- coding: utf-8 -*- 

jb. La respuesta es suficientemente buena. En caso de que quieras evitar agregar u , usa este

 from __future__ import unicode_literals