web-dev-qa-db-fra.com

Caractères non ASCII dans Matplotlib

J'ai un problème d'affichage des caractères non - ASCII dans Matplotlib, ces caractères sont affichés sous forme de petites cases au lieu d'une police appropriée, on dirait (j'ai rempli ces cases avec de la peinture rouge pour les mettre en évidence):

Here is the image showing the problem

Comment je le répare?

Une question connexe est caractères accentués dans Matplotlib.

47
jb.

Ce problème peut avoir plusieurs causes différentes:

La police par défaut n'inclut pas ces glyphes

Vous pouvez changer la police par défaut en utilisant ce qui suit (avant tout tracé est fait!)

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

Dans certaines versions de matplotlib, vous devrez définir la famille:

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

(Notez que parce que sans-serif contient un tiret à l'intérieur du **{} la syntaxe, c'est en fait nécessaire.)

La première commande modifie le sans-serif la famille de polices ne contient qu'une seule police (dans mon cas, c'était Arial ), la seconde définit la famille de polices par défaut sur sans-serif.

D'autres options sont incluses dans la documentation .

Vous avez mal créé/passé des objets chaîne dans Matplotlib

Même si la police contient des glyphes appropriés, si vous avez oublié d'utiliser u pour créer des constantes nicode , Matplotlib aura ce comportement:

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

Vous devez donc ajouter u:

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

Une autre cause est que vous avez oublié de mettre un commentaire magique TF-8 en haut du fichier (j'ai lu que cela pourrait être la source du problème ):

# -*- coding: utf-8 -*-
76
jb.

La réponse de jb. Est assez bonne. Si vous voulez éviter d'ajouter u, utilisez ceci

from __future__ import unicode_literals
5
Ferris