web-dev-qa-db-fra.com

Notebook iPython / Jupyter et Pandas, comment tracer plusieurs graphiques dans une boucle for?

Considérez le code suivant s'exécutant dans iPython/Jupyter Notebook:

from pandas import *
%matplotlib inline

ys = [[0,1,2,3,4],[4,3,2,1,0]]
x_ax = [0,1,2,3,4]

for y_ax in ys:
    ts = Series(y_ax,index=x_ax)
    ts.plot(kind='bar', figsize=(15,5))

Je m'attendrais à avoir 2 tracés distincts en sortie, à la place, je fusionne les deux séries en un seul tracé. Pourquoi donc? Comment puis-je obtenir deux tracés distincts en gardant la boucle for?

25
alec_djinn

Ajoutez simplement l'appel à plt.show() après avoir tracé le graphique (vous voudrez peut-être import matplotlib.pyplot pour le faire), comme ceci:

from pandas import *
import matplotlib.pyplot as plt
%matplotlib inline

ys = [[0,1,2,3,4],[4,3,2,1,0]]
x_ax = [0,1,2,3,4]

for y_ax in ys:
    ts = Series(y_ax,index=x_ax)
    ts.plot(kind='bar', figsize=(15,5))
    plt.show()
36
Andrey Sobolev

Dans le bloc-notes IPython, la meilleure façon de procéder est souvent d'utiliser des sous-tracés. Vous créez plusieurs axes sur la même figure, puis rendez la figure dans le bloc-notes. Par exemple:

import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline

ys = [[0,1,2,3,4],[4,3,2,1,0]]
x_ax = [0,1,2,3,4]

fig, axs = plt.subplots(ncols=2, figsize=(10, 4))
for i, y_ax in enumerate(ys):
    pd.Series(y_ax, index=x_ax).plot(kind='bar', ax=axs[i])
    axs[i].set_title('Plot number {}'.format(i+1))

génère les graphiques suivants

enter image description here

20
jmz