2012-07-06 12 views
28

Il mio problema è che mi piacerebbe usare titoli in lattice in alcuni grafici e non in lattice negli altri. In questo momento, matplotlib ha due diversi tipi di carattere predefiniti per titoli Latex e titoli non in lattice e vorrei che i due fossero coerenti. C'è un settaggio RC che devo cambiare che lo consentirà automaticamente?Matplotlib, font coerente con latex

ho generare una trama con il seguente codice:

import numpy as np 
from matplotlib import pyplot as plt 

tmpData = np.random.random(300) 

##Create a plot with a tex title 
ax = plt.subplot(211) 
plt.plot(np.arange(300), tmpData) 
plt.title(r'$W_y(\tau, j=3)$') 
plt.setp(ax.get_xticklabels(), visible = False) 

##Create another plot without a tex title 
plt.subplot(212) 
plt.plot(np.arange(300), tmpData) 
plt.title(r'Some random numbers') 
plt.show() 

Ecco l'incoerenza di cui sto parlando. Le etichette asse di zecche sono sottili alla ricerca relativa ai titoli .:

+0

Credo [questa risposta] (http://stackoverflow.com/questions/11611374/sans-serif-font-for-axes-tick-labels-with-latex) ti aiuterà –

risposta

26

per rendere la testo tex-style/testo matematico simile al testo normale, è necessario impostare il carattere MathTath su Bitstream Vera Sans,

import matplotlib 
matplotlib.rcParams['mathtext.fontset'] = 'custom' 
matplotlib.rcParams['mathtext.rm'] = 'Bitstream Vera Sans' 
matplotlib.rcParams['mathtext.it'] = 'Bitstream Vera Sans:italic' 
matplotlib.rcParams['mathtext.bf'] = 'Bitstream Vera Sans:bold' 
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$') 

Se si desidera che il testo normale assomigli al testo matematico, è possibile modificare tutto in Stix. Questo influenzerà le etichette, i titoli, zecche, ecc

import matplotlib 
matplotlib.rcParams['mathtext.fontset'] = 'stix' 
matplotlib.rcParams['font.family'] = 'STIXGeneral' 
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$') 

idea di base è che è necessario impostare entrambi i caratteri regolari e mathtext essere lo stesso, e il metodo per farlo è un po 'oscuro. È possibile visualizzare un elenco dei caratteri personalizzati,

sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist]) 

Come altri hanno detto, è anche possibile avere in lattice rende tutto per voi con un font impostando text.usetex nelle rcParams, ma è lento e non del tutto necessario.

11

EDIT

se si desidera modificare i caratteri utilizzati da LaTeX all'interno matplotlib, controlla questa pagina

http://matplotlib.sourceforge.net/users/usetex.html

uno degli esempi c'è

from matplotlib import rc 
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']}) 
## for Palatino and other serif fonts use: 
#rc('font',**{'family':'serif','serif':['Palatino']}) 
rc('text', usetex=True) 

Scegli il tuo preferito!

E se volete un carattere in grassetto, si può provare \mathbf

plt.title(r'$\mathbf{W_y(\tau, j=3)}$') 

EDIT 2

Di seguito vi farà difetto grassetto per voi

font = {'family' : 'monospace', 
     'weight' : 'bold', 
     'size' : 22} 

rc('font', **font) 
+0

Penso che dovrei chiarire il mio domanda. In questo momento, penso che il font Latex sia il più brutto e mi piacerebbe portarlo in linea con il font non in lattice. Mi piacerebbe qualcosa di più spesso, quindi il mio testo di trama è ancora leggibile se le trame vengono ridotte e inserite in una tesi/pubblicazione. – ncRubert

+0

@ncRubert gotcha, controlla la mia risposta aggiornata quindi. – nye17

+0

Un altro chiarimento. Voglio che le etichette degli assi siano più spesse. Sono la parte più illeggibile del grafico. Ho aggiornato la domanda per riflettere questo. – ncRubert

Problemi correlati