2012-07-06 22 views
28

Mi problema es que me gustaría usar títulos de látex en algunas parcelas, y no látex en otras. En este momento, matplotlib tiene dos fuentes predeterminadas diferentes para títulos de látex y títulos que no sean de látex, y me gustaría que los dos sean coherentes. ¿Hay alguna configuración de RC que deba cambiar que permita esto automáticamente?Matplotlib, fuente consistente utilizando látex

que generan una trama con el siguiente código:

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() 

Aquí es la inconsistencia que estoy hablando. Las etiquetas de los ejes de garrapatas son delgadas buscando en relación con los títulos .:

+0

Creo que [esta respuesta] (http://stackoverflow.com/questions/11611374/sans-serif-font-for-axes-tick-labels-with-latex) te ayudará –

Respuesta

26

para hacer que el tex-style/mathtext text se parece al texto normal, debe establecer la fuente mathtext en 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}$') 

Si desea que el texto normal se vea como texto de texto matemático, puede cambiar todo a Stix. Esto afectará etiquetas, títulos, garrapatas, etc.

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

idea básica es que es necesario establecer tanto las fuentes regulares y mathtext a ser el mismo, y la forma de hacerlo es un poco oscuro. Se puede ver una lista de las fuentes personalizadas,

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

Como otros han mencionado, también puede tener látex hacen todo para usted con una fuente definiendo text.usetex en los rcParams, pero eso es lento y no es del todo necesario.

11

EDITAR

si desea cambiar las fuentes utilizadas por el interior de látex matplotlib, echa un vistazo a esta página

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

uno de los ejemplos hay

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) 

¡Elija su favorito!

Y si quieres una fuente en negrita, puede intentar \mathbf

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

EDIT 2

A continuación se hará por defecto negrita para usted

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

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

Creo que debería aclarar mi pregunta. En este momento, creo que la fuente Latex es la más fea y me gustaría ponerla en línea con la fuente que no sea de látex. Me gustaría algo más grueso para que el texto de la trama siga siendo legible si las tramas se reducen y se colocan en una tesis/publicación. – ncRubert

+0

@ncRubert gotcha, verifique mi respuesta actualizada a continuación. – nye17

+0

Otra aclaración. Quiero que las etiquetas de ejes sean más gruesas. Son la parte más ilegible del gráfico. Actualicé la pregunta para reflejar esto. – ncRubert

Cuestiones relacionadas