Seite 1 von 1

Boxplots plotten mit Matplotlib funktioniert nicht

Verfasst: Dienstag 14. Oktober 2014, 06:58
von E1986
Hi. Ich habe durch einige Schritte aus Daten mehrerer csv-files folgenden Output ("data_to_plot"):
(dabei handelt es sich um 2 Beispielzeilen, eigentlich sind es noch mehr!)

Code: Alles auswählen

(-36.109999999999999, -21.699999999999999, 0.90000000000000002, 10.0, 88.0)
(-14.199999999999999, -4.5999999999999996, 4.0, 59.5, 3900.0)
Mein Code ist jetzt:

Code: Alles auswählen

fig = plt.figure(1, figsize=(9, 6))

ax = fig.add_subplot(111)

pylab.ylim([-1200,6200])    

plt.boxplot(data_to_plot, whis= 100)        

bp = ax.boxplot(data_to_plot, patch_artist=True)

for box in bp['boxes']:

         box.set( facecolor = 'b' )    

         ax.set_title('Arbeitspreis_Merit_Order (Boxplots)')
         ax.set_xlabel('Kalenderwoche')
         ax.set_ylabel('Arbeitspreis Euro/MWh')
         pylab.xticks((1,2), ['A','B'])

         fig.savefig('fig1.png', bbox_inches='tight')

         plt.show()
Als Ergebnis plottet er nur das Zweite Dataset, an der Stelle, an der der Boxplot des ersten sein müsste (über A). Ich denke, ich muss noch irgendwo eine Schleife einfügen. Hab auch schon viel versucht, aber nicht das entsprechende Resultat hinbekommen.

Bitte, könnte mir jemand helfen?
ACHTUNG: Unter der Zeile "for box in bp['boxes']:" ist alles eingerückt(Schleife!). Das ist also kein Fehler. Ich hab das hier nur nicht hinbekomen!!

Re: Boxplots plotten mit Matplotlib funktioniert nicht

Verfasst: Dienstag 14. Oktober 2014, 07:50
von MagBen
Es werden alle 5 geplottet. Ich habe Dein Beispiel hier etwas vereinfacht:

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt

data_to_plot = np.array([(-36.109999999999999, -21.699999999999999, 0.90000000000000002, 10.0, 88.0),
                         (-14.199999999999999, -4.5999999999999996, 4.0, 59.5, 3900.0)])

plt.figure()
plt.boxplot(data_to_plot, whis= 100)
plt.show()
Die 5. Box ist aber ca 100 mal größer als die anderen vier, deshalb werden die ersten vier Boxen nur als Strich geplottet.

Wenn ich 3900 zu 39 ändere, dann sieht man alle 5 Boxen:

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt

data_to_plot = np.array([(-36.109999999999999, -21.699999999999999, 0.90000000000000002, 10.0, 88.0),
                         (-14.199999999999999, -4.5999999999999996, 4.0, 59.5, 39.0)])

plt.figure()
plt.boxplot(data_to_plot, whis= 100)
plt.show()