Seite 1 von 1

Problem mit Matplotlib - legend() - Einträge

Verfasst: Dienstag 2. Dezember 2014, 13:52
von Pittan
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ß