LineCollection mit Linienfarben abhängig eines Listenwertes

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
superschlau
User
Beiträge: 26
Registriert: Mittwoch 4. April 2018, 09:12

Salü zäme
Ich zeichne geografische Höhenkurven. Dies mache ich in matplotlib mit der LineCollection-Funktion. Das heisst, aus meinen Daten zeichnen ich Kurve um Kurve meines Bereiches.

Code: Alles auswählen

    shapes = sf.shapes()
    records = sf.records()
    for record, shape in zip(records, shapes):
        y, x = zip(*shape.points)
        lats, lons = swiss2wgs(np.array(x), np.array(y))
        data = np.array(m(lons, lats)).T

        if len(shape.parts) == 1:
            segs = [data, ]
        else:
            segs = []
            for i in range(1, len(shape.parts)):
                index = shape.parts[i - 1]
                index2 = shape.parts[i]
                segs.append(data[index:index2])
            segs.append(data[index2:])

        lines = LineCollection(segs, antialiaseds=(1,))
        lines.set_edgecolors(color)
        lines.set_linewidth(linewidth)
        ax.add_collection(lines)
        
    plt.show()
Ich möchte nun aber, anstelle der eines festen Color-Wertes (lines.set_edgecolors(color)) einen Farbe in Abhängigkeit der Höhe der einzelnen Kurve verwenden. Und dann dazu eine Colorbar des Farbbereiches zeichnen.

Ich kann zwar die Farbe in Abhängigkeit der Höhe wechseln:

Code: Alles auswählen

    yMin = 0; yMax = 4000
    ticks = np.linspace(yMin, yMax, 20)
    cm = LinearSegmentedColormap.from_list("cm", ["#81fcff", "#19ff19", "#e2f000", "#ffaa31", "#ff8e51", "#ff6969",
                                              "#8c0000", "#3c0000"])
    cNorm = matplotlib.colors.Normalize(0, 1)
    scalarMap = matplotlib.cm.ScalarMappable(norm=cNorm, cmap=cm)
    ...
    ...
    color = scalarMap.to_rgba((record[2]  - yMin) / (yMax - yMin) )
    lines.set_edgecolors(color)
Aber, damit kann ich keine Colorbar erzeugen ("No mappable was found to use for colorbar creation.").

Ist es möglich die einzelnen Höhenlinien so farbig darzustellen, damit diese einem System von Farben entspricht?
Danke und Gruss, Jakob
Antworten