web-dev-qa-db-fra.com

ValueError: num doit être 1 <= num <= 2, pas 3

J'ai le dataframe suivant que j'ai généré à l'aide de pivot_table:

enter image description here

et j'utilise le code suivant pour boxplot les multiples colonnes:

    fig = plt.figure()
for i in range(0,25):
    ax = plt.subplot(1,2,i+1)
    toPlot1.boxplot(column='Score',by=toPlot1.columns[i+1],ax=ax)
fig.suptitle('test title', fontsize=20)
plt.show()

Je m'attendais à une sortie comme celle-ci:

enter image description here

Mais ce code me donne l'erreur suivante:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-275-9c68ce91596f> in <module>()
      1 fig = plt.figure()
      2 for i in range(0,25):
----> 3     ax = plt.subplot(1,2,i+1)
      4     toPlot1.boxplot(column='Score',by=toPlot1.columns[i+1],ax=ax)
      5 fig.suptitle('test title', fontsize=20)

E:\Anaconda2\lib\site-packages\matplotlib\pyplot.pyc in subplot(*args, **kwargs)
   1020 
   1021     fig = gcf()
-> 1022     a = fig.add_subplot(*args, **kwargs)
   1023     bbox = a.bbox
   1024     byebye = []

E:\Anaconda2\lib\site-packages\matplotlib\figure.pyc in add_subplot(self, *args, **kwargs)
   1003                     self._axstack.remove(ax)
   1004 
-> 1005             a = subplot_class_factory(projection_class)(self, *args, **kwargs)
   1006 
   1007         self._axstack.add(key, a)

E:\Anaconda2\lib\site-packages\matplotlib\axes\_subplots.pyc in __init__(self, fig, *args, **kwargs)
     62                     raise ValueError(
     63                         "num must be 1 <= num <= {maxn}, not {num}".format(
---> 64                             maxn=rows*cols, num=num))
     65                 self._subplotspec = GridSpec(rows, cols)[int(num) - 1]
     66                 # num - 1 for converting from MATLAB to python indexing

ValueError: num must be 1 <= num <= 2, not 3

Je crois que c'est parce qu'il ne peut y avoir que 2 boîtes à moustaches sur un graphique?

Une idée pour réparer ceci? Tout pointeur serait très apprécié.

TIA.

11
Patthebug

Notez que vous ne générez que deux sous-tracés:

ax = plt.subplot(1,2,i+1)

Le premier argument est le nombre de tracés dans chaque ligne et le second le nombre de tracés par colonne (voir aussi la documentation matplotlib.pyplot.subplot ). Le nombre total de parcelles disponibles dans votre cas est donc: 1*2 = 2. Si vous souhaitez en créer 25, vous pouvez par exemple utiliser:

ax = plt.subplot(5,5,i+1)

5 parcelles par ligne et 5 par colonne s'ajoutent à un nombre total de 5*5 = 25

22
MSeifert