Seite 1 von 1

LineCollection mit Linienfarben abhängig eines Listenwertes

Verfasst: Sonntag 15. Dezember 2019, 09:25
von superschlau
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