Bloc-notes iPython / Jupyter et Pandas, comment tracer des graphes multiples dans une boucle for?

Considérons le code suivant exécute dans iPython/Jupyter Portable:

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 placettes séparées en sortie, à la place j'ai fait fusionner les deux séries en une seule placette. Pourquoi est-ce? Comment puis-je obtenir deux parcelles séparées en gardant le for boucle?

20
demandé sur alec_djinn 2015-04-09 10:55:00

2 réponses

il suffit d'ajouter l'appel à plt.show() après vous le graphe (vous pouvez 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()
25
répondu Andrey Sobolev 2017-03-22 14:20:51

dans le carnet IPython la meilleure façon de le faire est souvent avec des sous-lots. Vous créez plusieurs axes sur la même figure et vous rendez ensuite la figure dans le carnet. 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

14
répondu jmz 2015-04-09 08:38:12