2014-05-23 13 views
16

Sto usando matplotlib insieme con le etichette di lattice per l'asse, il titolo e colorbar etichette text non funziona in un'etichetta matplotlib

Mentre funziona davvero grande la maggior parte del tempo, ha alcuni problemi quando si dispone di un formula usando \ text.

Un esempio davvero semplice.

from matplotlib import pyplot as plt 
plt.plot([1,2,3]) 
plt.title(r"$f_{\text{cor, r}}$") 

plt.show() 

Questo si tradurrà in un messaggio di errore del tipo:

IPython/core/formatters.py:239: FormatterWarning: Exception in image/png formatter: 
f_{\text{1cor, r}} 
^
Unknown symbol: \text (at char 3), (line:1, col:4) 
    FormatterWarning, 

C'è un modo facile da usare \ testo in là?

risposta

21

\text non funzionerà perché richiede il pacchetto diamsmath (non incluso nel mathtext - il motore di rendering di matematica matplotlib). Quindi, fondamentalmente, sono due opzioni:

  • uso di font basato lattice di rendering
from matplotlib import pyplot as plt 
import matplotlib as mpl 
mpl.rcParams['text.usetex'] = True 
mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] #for \text command 
plt.plot([1,2,3]) 
plt.title(r"$f_{\text{cor, r}}$") 
plt.show() 
  1. uso mathtext ma utilizzare \mathrm invece di \text
from matplotlib import pyplot as plt 
import matplotlib as mpl 
mpl.rcParams['text.usetex'] = False # not really needed 
plt.plot([1,2,3]) 
plt.title(r"$f_{\mathrm{cor, r}}$") 
plt.show() 

Quest'ultimo approccio crea una figura come enter image description here
Tenere presente che, a differenza del comando \text, gli spazi all'interno dell'ambiente \mathrm non vengono rispettati. Se si desidera più spazio tra le variabili, è necessario utilizzare i comandi in stile latex (\<space>, \;, ...).

+0

Grazie! Soprattutto per la vera spiegazione del perché si comporta in questo modo. –

1

Un'opzione è di lasciare libplot matplot lib use LaTeX directly per il rendering del testo (anziché l'implementazione mathtext fornita da matplotlib).

import matplotlib as mpl 
mpl.rcParams['text.usetex'] = True 
# (create your plot as before) 
plt.title(r"$f_{\mathrm{cor, r}}$") 

Ciò richiede un'installazione LaTeX completamente funzionante. Non riesco a capirlo per riconoscere \text, ma il \mathrm funziona (per il carattere "famiglia romana") bene.

+0

Certo, questo risolve il problema, anche se spesso mi piacerebbe mantenere il rendering normale per il resto. –

+0

sì, sono d'accordo (e in generale cerco di evitare il pieno LaTeX quando sto progettando se posso). Sembra che mi sbagliassi riguardo all'ambiente 'mathrm' che richiede l'impostazione di configurazione' text.usetex' - @ La risposta di Jakob mostra che è implementata in testo matematico. – Bonlenfum

Problemi correlati