2010-03-09 19 views
19

C'è un modo per ottenere Matplotlib per il rendering di caratteri accentati (é, ã, â, etc)?Caratteri accentati in Matplotlib

Ad esempio, sto cercando di utilizzare i caratteri accentati su set_yticklabels() e Matplotlib esegue il rendering dei quadrati invece, e quando uso unicode() esegue il rendering dei caratteri errati.

C'è un modo per farlo funzionare?

Si scopre che si può usare u "EA", ma prima è necessario impostare il file di codifica:

# Using the magic encoding 
# -*- coding: utf-8 -*- 

Dopo che Matplotlib rende correttamente

u"é" 

Ho anche imparato che si può utilizzare

import matplotlib.font_manager as fm 
fp1=fm.FontProperties(fname="/path/to/somefont.ttf") 
ax.title("é",fontproperties=fp1) 

nel caso in cui sia necessario eseguire il rendering di caratteri che Matplotlib non ha.

+0

Buona domanda. Unicode ha un ricco repertorio di simboli matematici, e spero che Unicode funzioni quando usato. –

+0

Esiste un modo per simulare questo comportamento utilizzando la modalità interattiva? (Ad esempio, sto usando IPython.) Il trucco con l'uso di Gestione caratteri non ha funzionato per me. – Halka

+0

Non importa, questo è un problema con [IPython stesso] (https://github.com/ipython/ipython/issues/labels/unicode#issue/25). – Halka

risposta

14

prefisso le corde con u dire Python che sono stringhe Unicode:

ax.set_yticklabels([u'é', u'ã', u'â']) 
+1

Grazie per il tuo ptomato di input ma restituisce i caratteri sbagliati quando uso u "é" o unicode ('é', 'latin-1'), questi funzionano per te? – OldJim

+0

Sì, quelli lavorano per me. Come dici nel tuo aggiornamento, è stata la codifica del file a causare il problema. – ptomato

+0

Non funziona con determinati caratteri, ad es. u'ő ' –

7

Sicuro. È possibile utilizzare TeX:

from matplotlib import rcParams 
rcParams['text.usetex'] = True 
ax = ... # Axes object 
ax.set_yticklabels(['$\'{e}$', '$\tilde{a}$', '$\hat{a}$']) 
+0

L'utilizzo di tex funziona, ma dal momento che il testo da rendere è in un database (unicode) dovrò "convertirlo" ogni volta, o c'è una soluzione più facile qui? – OldJim

+0

Oh, ok. Sì, allora questa soluzione potrebbe essere fastidiosa. Usa l'altra soluzione. –

5

Ho anche avuto questo problema in particolare quando stavo cercando di utilizzare la funzione di annotazione. Qui è stato il mio messaggio di errore:

ValueError: matplotlib display text must have all code points < 128 or use Unicode strings 

Ed ecco quello che ho usato per risolvere questo:

"accented string i.e. sāo paulo".decode('utf-8') 
0

da matplotlib importazione rc

rcParams['text.latex.unicode']=True 
Problemi correlati