Problem mit Matplotlib - legend() - Einträge

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
Pittan
User
Beiträge: 34
Registriert: Freitag 1. August 2014, 15:56

Hallo,

ich habe folgendes Balkendiagramm programmiert mithilfe von matplotlib.pyplot

Bild

Den Code dazu gibt es hier:

Code: Alles auswählen

    def GainLossHourlyBars(self, Losses, Gains):
        width=0.8
        left=0.5
        leftg=0.5
        FarbenL=np.array(["LightCoral", "Yellow", "PeachPuff", "Thistle",
                          "CornflowerBlue", "PaleGreen", "Cornsilk","YellowGreen",
                          "MediumSpringGreen"]) # Farben der bars fuer die Losses
        FarbenG=np.array(["DarkRed", "DarkOrange", "DarkKhaki", "DarkViolet",
                          "DarkSlateBlue", "DarkGreen", "DarkCyan", "DarkBlue",
                          "SaddleBrown", "Chocolate"]) # Farben der bars fuer die Gains
        LossLabels=np.array(["Neighbour", "Children", "Corridor", "Bedroom", 
                             "OutsideWall", "Ceiling", "Floor", "Infiltration", "Ventilation"]) # Eintraege der Legende Losses
        GainLabels=np.array(["Heating", "GainNeighbour", "GainChildren", "GainCorridor",
                       "GainBedroom", "GainOutsideWall", "GainCeiling", "GainFloor", "GainInfiltration", "GainVentilation"]) # Eintraege der Legende Gains

        for DayL in range(1, len(Losses[0,1,:])):
            boden=0.
            for Value in range(len(Losses[:,0,0])):
                height=Losses[Value,1,DayL]-Losses[Value,1,(DayL-1)]
                plt.bar(left, height, width, bottom=boden, color=FarbenL[Value])
                boden=boden+height
            left=left+1
        for DayG in range(1, len(Gains[0,1,:])):
            boden=0.
            for Value in range(len(Gains[:,0,0])):
                heightG=Gains[Value,1,DayG]-Gains[Value,1,(DayG-1)]
                plt.bar(leftg, heightG, width, bottom=boden, color=FarbenG[Value])
                boden=boden+heightG
            leftg=leftg+1

#        plt.legend()
        plt.show()
Der Funktion werden die beiden numpyArrays Losses und Gains übergeben (Dimension: 9X2X31 bzw 10X2X31). Die 31 steht für die Monatstage und über Axis=0 werden die bars gebildet.

Mein Problem liegt nun darin, eine ordentliche Legende zu bilden. Wenn ich einfach

Code: Alles auswählen

plt.bar(leftg, heightG, width, bottom=boden, color=FarbenG[Value], label=GainLabels[Value])
einbaue, bekomme ich eine Legende mit 10*31 einträgen. Ich brauche aber nur 10+9 Einträge (Axis0 aus den übergebenen Variablen).

Hat jemand eine Idee, wie ich das anstelle?

Danke
Gruß
Antworten