3 Stimmen

Einstellen des Bereichs einer Farbkarte in Matplotlib

Ich verwende Matplotlib, um ein einfaches Diagramm zu erstellen:

cm=plt.get_cmap('Blues')

nx.draw_circular(G,
        node_color='White',
        edge_color=range(G.number_of_edges()),
        edge_cmap=cm,
        node_size=900,
        width=4
        )

Ich möchte einen Bereich auf der Farbkarte "Blues" so einstellen, dass die weiße Farbe, die in der Zeichnung nicht sichtbar ist, gelöscht wird.

Bitte um Hilfe!

Entschuldigung für schlechtes Englisch.

2voto

tom10 Punkte 63374

Der Bereich (oder Normierung ) ist nicht wirklich ein Merkmal der Farbkarte, wird aber oft als Merkmal in den Funktionen implementiert, die Farbkarten verwenden. Zum Beispiel, imshow verwendet vmin y vmax Sie können also versuchen, diese als Schlüsselwörter zu verwenden mit draw_circular (ich kann die Dokumentation nicht finden), oder vielleicht norm .

Darüber hinaus können Sie Ihre eigene Farbkarte mit der von Ihnen gewünschten genauen Farbanordnung erstellen. Es gibt zahlreiche Beispiele für die Erstellung von benutzerdefinierten Farbkarten, und es gibt verschiedene Ansätze. Hier ( a , b , c , d ) sind einige Beispiele, die für Sie nützlich sein könnten.

1voto

crypdick Punkte 9266

Ich bin auf dieses Problem gestoßen, als ich versuchte, Daten mit verschiedenen Farbkarten darzustellen:

Blues vs Reds

Es ist schwer zu erkennen, welche der weißlichen Punkte zu welcher Verteilung gehören. Ich habe dieses Problem gelöst, indem ich die weißeren Teile des Spektrums der Farbkarte abgeschnitten habe:

Blues vs Reds with white removed

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap

def chop_cmap_frac(cmap: LinearSegmentedColormap, frac: float) -> LinearSegmentedColormap:
    """Chops off the beginning `frac` fraction of a colormap."""
    cmap_as_array = cmap(np.arange(256))
    cmap_as_array = cmap_as_array[int(frac * len(cmap_as_array)):]
    return LinearSegmentedColormap.from_list(cmap.name + f"_frac{frac}", cmap_as_array)

cmap1 = plt.get_cmap('Reds')
cmap2 = plt.get_cmap('Blues')

cmap1 = chop_cmap_frac(cmap1, 0.4)
cmap2 = chop_cmap_frac(cmap2, 0.4)
np.random.seed(42)
n = 50
xs = np.random.normal(size=n)
ys = np.random.normal(size=n)
vals = np.random.uniform(size=n)

plt.scatter(xs, ys, c=vals, cmap=cmap1)
plt.scatter(ys, xs, c=vals, cmap=cmap2)
plt.gca().set_facecolor('black')
plt.colorbar()
plt.show()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X