Fehlerhafte Legende mit matplotlib [solved]
Verfasst: Mittwoch 19. März 2008, 11:12
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:
Weiß einer von euch, was da schief läuft?
Gruß,
Manuel
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

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()
Gruß,
Manuel