Fehlerhafte Legende mit matplotlib [solved]

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Moin,

ich bastel momentan einige Diagramme mit matplotlib und das funktioniert eigentlich auch ganz gut (wenn man mal einigermaßen durchgestiegen ist).

Jetzt habe ich aber einige Probleme mit den Balkendiagrammen. An Doku finde ich nicht sehr viel dazu. Mein Problem: Ich habe sieben Balken pro Spalte auf der X-Achse. Jeder der sieben Balken hat eine eigene Farbe. Gezeichnet wird das ganze dann auch korrekt. Aber die Farben in der Legende sind falsch: Ich habe da sechs mal die Farbe des ersten Balkens ein einmal die Farbe des zweiten :?. Entweder ich mache was falsch, oder da steckt ein Bug drin. Male ich das gleiche als Liniendiagramm, dann stimmt die Legende.

Hier mein Code:

Code: Alles auswählen

from itertools import cycle

from matplotlib.pylab import show, figure
from matplotlib.figure import SubplotParams

COLORS = ['#990000', '#CC0000', '#FF3300',
          '#FF6600', '#FF9900', '#FFCC00', '#FFFF33',]

LABELS = ('Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 
          'Freitag', 'Samstag', 'Sonntag',)

BAR_WIDTH = 6

color_pool = cycle(COLORS)

x_data = [50, 100, 150, 200, 250, 300]
y_data = [
    [325, 679, 591, 703, 744, 670],
    [313, 711, 709, 481, 878, 743],
    [377, 729, 686, 386, 1022, 783],
    [401, 687, 708, 576, 1006, 406],
    [379, 516, 647, 610, 624, 770],
    [138, 125, 104, 174, 142, 172],
    [93, 173, 71, 130, 182, 140],
]

fig = figure()
fig.subplotpars = SubplotParams(right=.7) # keep space for legend
plot = fig.add_subplot(111)

entries = list()
for i, y in enumerate(y_data):
    adjusted_x = map(lambda v: (v + i * BAR_WIDTH), x_data)
    entry = plot.bar(adjusted_x, y, width=BAR_WIDTH, color=color_pool.next())
    #entry = plot.plot(adjusted_x, y,
    #                  linewidth=BAR_WIDTH, color=color_pool.next())
    entries.append(entry)

fig.legend(entries, LABELS, 'center right')

show()
Weiß einer von euch, was da schief läuft?

Gruß,
Manuel
Zuletzt geändert von helduel am Mittwoch 19. März 2008, 11:51, insgesamt 1-mal geändert.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

ich nehme an, Du möchtest

Code: Alles auswählen

entries.append(entry[0])
?

Schau Dir mal die Rückgabewerte von .bar() an. (Ich gebe zu, daß es besser wäre hier eine Fehlermeldung zu schmeissen. Sollte man vielleicht anregen.)

Gruß,
Christian
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

CM hat geschrieben:Schau Dir mal die Rückgabewerte von .bar() an. (Ich gebe zu, daß es besser wäre hier eine Fehlermeldung zu schmeissen. Sollte man vielleicht anregen.)
Stimmt. Obwohl es ja mein Linien funktioniert und hier wird auch eine Liste pro Linie zurückgegeben. Lediglich bei den Bar-Charts enthält jede Liste mehrere Einträge...

Jetzt funktioniert's jedenfalls. Vielen Dank!

Gruß,
Manuel
Antworten