web-dev-qa-db-fra.com

Donner aux graphiques un sous-titre dans matplotlib

Je veux donner à mon graphique un titre en grande police 18 pt, puis un sous-titre en dessous en petite police 10 pt. Comment puis-je faire cela dans matplotlib? Il semble que la fonction title() ne prenne qu'une seule chaîne avec un seul attribut fontsize. Il doit y avoir un moyen de le faire, mais comment?

45
priestc

Je ne pense pas qu'il y ait quelque chose de intégré, mais vous pouvez le faire en laissant plus d'espace au-dessus de vos axes et en utilisant 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 est l'abréviation de horizontalalignment .

13
Jouni K. Seppänen

Ce que je fais, c'est utiliser la fonction title () pour le sous-titre et le suptitle () pour le titre principal (ils peuvent prendre différents arguments de police). J'espère que cela pourra aider!

60
Floris van Vugt

Bien que cela ne vous donne pas la flexibilité associée à plusieurs tailles de police, l'ajout d'un caractère de nouvelle ligne à votre chaîne pyplot.title () peut être une solution simple;

plt.title('Really Important Plot\nThis is why it is important')
21
Jason

Il s'agit d'un exemple de code pandas qui implémente la réponse de Floris van Vugt (20 décembre 2010). Il a déclaré:

> Ce que je fais est d'utiliser la fonction title () pour le sous-titre et le suptitle () pour le titre principal (ils peuvent prendre différents arguments de taille de police). J'espère que ça aide!

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)

Remarque: Je n'ai pas pu commenter cette réponse car je suis nouveau sur stackoverflow.

17
Tim Misner

Utilisez simplement TeX! Cela marche :

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

EDIT: Pour activer le traitement TeX, vous devez ajouter la ligne "usetex = True" aux paramètres matplotlib:

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)

Je suppose que vous avez également besoin d'une distribution TeX fonctionnelle sur votre ordinateur. Tous les détails sont donnés sur cette page:

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

7
pierre

La solution qui a fonctionné pour moi est:

  • utilisez suptitle() pour le titre réel
  • utilisez title() pour le sous-titre et ajustez-le en utilisant le paramètre facultatif y:
    import matplotlib.pyplot as plt
    """
            some code here
    """
    plt.title('My subtitle',fontsize=16)
    plt.suptitle('My title',fontsize=24, y=1)
    plt.show()

Il peut y avoir un chevauchement désagréable entre les deux morceaux de texte. Vous pouvez résoudre ce problème en jouant avec la valeur de y jusqu'à ce que vous obteniez le bon résultat.

5
data.dude