Wie erstelle ich einen Farbverlauf in Python?

8

Ich möchte eine neue Farbpalette erstellen, die zwischen Grün und Blau (oder zwei anderen Farben) interpoliert. Mein Ziel ist etwas wie:

Zunächst bin ich mir wirklich nicht sicher, ob dies mit der linearen Interpolation von Blau und Grün möglich ist. Wenn es möglich ist, bin ich mir nicht sicher, wie das geht. Ich fand eine Dokumentation über die Verwendung einer Matplotlib-Methode, die angegebene RGB-Werte hier

Das wirkliche Problem ist zu verstehen, wie "cdict2" unten funktioniert. Für das Beispiel sagt die Dokumentation:

"Beispiel: Angenommen, Sie möchten, dass Rot in der unteren Hälfte von 0 auf 1 ansteigt, grün in der mittleren Hälfte und Blau in der oberen Hälfte. Dann würden Sie Folgendes verwenden:"

%Vor%

EDIT: Ich verstehe jetzt, wie die Interpolation funktioniert, zum Beispiel wird dies eine Rot-zu-Weiß-Interpolation ergeben:

Weiß nach rot: Wenn Sie die Spalten der "Matrix" für jede Farbe nach unten gehen, haben wir in der ersten Spalte die X-Koordinate, wo die Interpolation beginnen und enden soll, und die zwei anderen Spalten sind die tatsächlichen Werte für den Farbwert an dieser Koordinate.

%Vor%

Es ist offensichtlich, dass der gewünschte Gradient sehr schwierig durch Interpolation im RGB-Raum erzeugt werden kann ...

    
Jack 04.09.2014, 15:01
quelle

5 Antworten

30

Eine einfache Antwort, die ich noch nicht gesehen habe, ist die Verwendung des Farbpakets .

Installieren über Pip

%Vor%

Verwenden Sie so:

%Vor%

Ändern Sie die Eingaben in beliebige Farben

    
Hamy 19.04.2015 21:22
quelle
16

Es ist offensichtlich, dass der ursprüngliche Beispielgradient nicht linear ist. Sehen Sie sich eine Grafik der Rot-, Grün- und Blauwerte an, die über das Bild gemittelt wurden:

Der Versuch, dies mit einer Kombination aus linearen Gradienten wiederherzustellen, wird schwierig.

Für mich sieht jede Farbe wie die Addition von zwei Gaußkurven aus, also habe ich ein paar gute Passungen gemacht und kam dabei auf:

Mit diesen berechneten Werten kann ich einen wirklich schönen Farbverlauf erstellen, der fast genau zu Ihrem passt.

%Vor%

Leider weiß ich noch nicht, wie man es auf beliebige Farben verallgemeinert.

    
Mark Ransom 05.09.2014 05:22
quelle
5

Das erste Element jedes Tupels (0, 0,25, 0,5 usw.) ist der Ort, an dem die Farbe einen bestimmten Wert haben sollte. Ich nahm 5 Proben, um die RGB-Komponenten (in GIMP) zu sehen, und legte sie in die Tabellen. Die RGB-Komponenten gehen von 0 nach 1, also musste ich sie durch 255,0 teilen, um die normalen 0-255-Werte zu skalieren.

Die 5 Punkte sind eine ziemlich grobe Annäherung - wenn Sie eine glattere Erscheinung wünschen, verwenden Sie mehr Werte.

%Vor%

Beachten Sie, dass Rot ziemlich präsent ist. Es ist da, weil der mittlere Bereich sich grau nähert - wo die drei Komponenten notwendig sind.

Dies erzeugt:

    
jcoppens 04.09.2014 15:53
quelle
3

Dies erzeugt eine Colormap, die durch einen einzigen Parameter gesteuert wird, y :

%Vor%

red steigt von 0 auf y und dann wieder runter auf 0. green steigt von 0 auf y und ist dann konstant. blue stars at y und ist für die erste Hälfte konstant und fällt dann auf 0 ab.

Hier ist das Diagramm mit y = 0.7 :

Sie könnten es durch Hinzufügen eines oder mehrerer Segmente glätten.

    
Warren Weckesser 04.09.2014 15:47
quelle
3

Ich brauchte das auch, aber ich wollte mehrere willkürliche Farbpunkte eingeben. Betrachten Sie eine Heatmap, wo Sie schwarz, blau, grün ... bis hin zu "heißen" Farben brauchen. Ich habe Mark Ransom den obigen Code ausgeliehen und ihn so erweitert, dass er meinen Bedürfnissen entspricht. Ich bin sehr glücklich damit. Ich danke allen, besonders Mark.

Dieser Code ist neutral für die Größe des Bildes (keine Konstanten in der Gaußverteilung); Sie können es mit dem Parameter width = zu pixel () ändern. Es erlaubt auch, die "Verbreitung" (- & gt; stddev) der Verteilung abzustimmen; Sie können sie weiter verwirren oder schwarze Bänder einfügen, indem Sie den spread = -Parameter in pixel () ändern.

%Vor%     
dgc 29.06.2015 20:47
quelle

Tags und Links