2009-09-07 80 views
31

Quiero dar a mi gráfico un título en letra grande de 18 puntos, luego un subtítulo debajo en una fuente más pequeña de 10 puntos. ¿Cómo puedo hacer esto en matplotlib? Parece que la función title() solo toma una sola cadena con un solo atributo fontsize. Tiene que haber una manera de hacer esto, pero ¿cómo?Dando a los gráficos un subtítulo en matplotlib

Respuesta

10

no creo que haya nada incorporado, pero puede hacerlo dejando más espacio por encima de sus ejes y el uso de figtext:

axes([.1,.1,.8,.7]) 
figtext(.5,.9,'Foo Bar', fontsize=18, ha='center') 
figtext(.5,.85,'Lorem ipsum dolor sit amet, consectetur adipiscing elit',fontsize=10,ha='center') 

ha es la abreviatura de horizontalalignment.

43

Lo que hago es usar la función title() para el subtítulo y el subtítulo() para el título principal (pueden tomar diferentes argumentos fontsize). ¡Espero que ayude!

+0

Al menos en una trama polar estándar, el título, el subtítulo y el marcador de 90 grados se superponen, especialmente si utiliza fuentes más grandes. – gbronner

13

Aunque esto no le da la flexibilidad asociada con múltiples tamaños de fuente, agregar un carácter de nueva línea a su cadena pyplot.title() puede ser una solución simple;

plt.title('Really Important Plot\nThis is why it is important') 
+1

La mayoría de las veces quiere algunas diferencias estilísticas entre títulos y subtítulos. De lo contrario, parece un título descuidado dividido en dos líneas. – Annan

4

¡Solo tiene que utilizar TeX! Esto funciona:

title(r"""\Huge{Big title !} \newline \tiny{Small subtitle !}""") 

EDIT: Para habilitar el procesamiento de TeX, es necesario agregar la línea "usetex = True" a matplotlib parámetros:

fig_size = [12.,7.5] 
params = {'axes.labelsize': 8, 
     'text.fontsize': 6, 
     'legend.fontsize': 7, 
     'xtick.labelsize': 6, 
     'ytick.labelsize': 6, 
     'text.usetex': True,  # <-- There 
     'figure.figsize': fig_size, 
     } 
rcParams.update(params) 

supongo que también necesita una distribución TeX a trabajar en su computadora. Todos los detalles se dan en esta página:

http://matplotlib.org/users/usetex.html

+0

suena interesante, pero ¿ha establecido algún indicador adicional para matplotlib para habilitar el modo tex? Usar 1.4.1 con la configuración predeterminada no funciona para tu ejemplo. Trazar las matemáticas con r "$ expr $" en el título funciona por cierto. – marscher

+0

mismo problema aquí – dranxo

12

Este es un ejemplo de código que implementa pandas respuesta de Floris van Vugt (Diciembre 20, 2010). Dijo:

> Lo que hago es usar la función title() para el subtítulo y el subtítulo() para el> título principal (pueden tomar diferentes argumentos fontsize). ¡Espero que ayude!

import pandas as pd 
import matplotlib.pyplot as plt 

d = {'series a' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']), 
     'series b' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])} 
df = pd.DataFrame(d) 

title_string = "This is the title" 
subtitle_string = "This is the subtitle" 

plt.figure() 
df.plot(kind='bar') 
plt.suptitle(title_string, y=1.05, fontsize=18) 
plt.title(subtitle_string, fontsize=10) 

Nota: no podía comentar sobre eso respuesta porque soy nuevo en stackoverflow.

+0

¿Qué pasa si tienes dos subtramas? Si llamo 'subtitle_string = ('Panel superior: Max, Avg, Min,% Huella | Panel inferior: Huella% y Células Criticas%')' y luego 'plt.suptitle (title_string, y = 0.99, fontsize = 17)' en un gráfico con dos subparcelas, el subtítulo se imprime por encima de la segunda subtrama en lugar de la primera y no veo la leyenda impresa. – FaCoffee

Cuestiones relacionadas