Standardfarbe ändert sich #

Wie an anderer Stelle [Links einfügen] ausführlich besprochen, jetist es eine empirisch schlechte Farbtabelle und sollte nicht die Standard-Farbtabelle sein. Aufgrund der Position, dass das Ändern des Erscheinungsbilds der Handlung die Abwärtskompatibilität unterbricht, wurde diese Änderung viel länger aufgeschoben, als es hätte sein sollen. Zusätzlich zur Änderung der Standard-Farbkarte planen wir, die Gelegenheit zu nutzen, den Standard-Farbzyklus auf Plots zu ändern und eine andere Farbkarte für gefüllte Plots ( imshow, pcolor, contourf, usw.) und für streuungsähnliche Plots zu übernehmen.

Standard-Heatmap-Farbkarte #

Die Wahl einer neuen Farbkarte ist ein fruchtbarer Boden für Fahrradverschwendung ("Nein, es sollte _diese_ Farbe sein"), also haben wir einen vorgeschlagenen Satz von Kriterien (über Nathaniel Smith), um vorgeschlagene Farbkarten zu bewerten.

  • es sollte eine sequentielle Farbtabelle sein, da divergierende Farbtabellen wirklich irreführend sind, es sei denn, Sie wissen, wo sich das "Zentrum" der Daten befindet, und für eine Standard-Farbtabelle werden wir dies im Allgemeinen nicht tun.

  • sie sollte wahrnehmungsmäßig einheitlich sein, dh menschliche subjektive Urteile darüber, wie weit benachbarte Farben voneinander entfernt sind, sollten so linear wie möglich der Differenz zwischen den numerischen Werten entsprechen, die sie darstellen, zumindest lokal.

  • es sollte eine wahrnehmbar gleichmäßige Helligkeitsrampe haben, dh wenn Sie in Graustufen konvertieren, sollte es immer noch gleichmäßig sein. Dies ist sowohl in praktischer Hinsicht nützlich (Graustufendrucker gibt es immer noch!) als auch, weil die Luminanz ein sehr starker und natürlicher Hinweis auf die Größe ist.

  • es sollte auch eine Art Variation im Farbton haben, weil Farbtonvariationen ein wirklich hilfreicher zusätzlicher Hinweis für die Wahrnehmung sind, zwei Hinweise zu haben ist besser als einer, und es gibt keinen Grund, dies nicht zu tun.

  • die Farbtonvariation sollte so gewählt werden, dass selbst für Betrachter mit den häufigeren Arten von Farbenblindheit vernünftige Ergebnisse erzielt werden. (Was Dinge wie Rot-zu-Grün ausschließt.)

  • Für Bonuspunkte wäre es schön, eine Farbtonrampe zu wählen, die immer noch funktioniert, wenn Sie die Luminanzvariation wegwerfen, denn dann könnten wir die Version mit variierender Luminanz für 2D-Plots und die Version mit nur der Farbtonvariation für 3D-Plots verwenden. (In 3D-Plots möchten Sie den Luminanzkanal wirklich für Beleuchtung / Schattierung reservieren, da Ihr Gehirn wirklich gut darin ist, 3D-Formen aus Luminanzvariationen zu extrahieren. Wenn die 3D-Oberfläche selbst eine stark variierende Luminanz aufweist, beeinträchtigt dies die Fähigkeit, Formen zu sehen. )

  • Kein bestehendes IP verletzen

Beispielskript #

Vorgeschlagene Farbkarten #

Standard-Streufarbkarte #

Für Heatmap-ähnliche Anwendungen kann es wünschenswert sein, so viel wie möglich von der Luminanzskala abzudecken, jedoch kann es beim Colormapping von Markierungen ein Problem sein, Markierungen zu haben, die zu weiß sind. Aus diesem Grund schlagen wir vor, eine andere (aber möglicherweise verwandte) Farbkarte als die Heatmap für Marker-basiert zu verwenden. Die Designparameter sind die gleichen wie oben, nur mit einer begrenzteren Luminanzvariation.

Beispielskript #

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1234)

fig, (ax1, ax2) = plt.subplots(1, 2)

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2  # 0 to 15 point radiuses

ax1.scatter(x, y, s=area, c=colors, alpha=0.5)


X,Y = np.meshgrid(np.arange(0, 2*np.pi, .2),
                  np.arange(0, 2*np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
Q = ax2.quiver(X, Y, U, V, units='width')
qd = np.random.rand(np.prod(X.shape))
Q.set_array(qd)

Vorgeschlagene Farbkarten #

Farbkreis / qualitative Farbkarte #

Beim Zeichnen von Linien ist es häufig wünschenswert, mehrere Linien oder Künstler zu zeichnen, die unterscheidbar sein müssen, aber es gibt keine inhärente Ordnung.

Beispielskript #

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1, 2)

x = np.linspace(0, 1, 10)

for j in range(10):
    ax1.plot(x, x * j)


th = np.linspace(0, 2*np.pi, 1024)
for j in np.linspace(0, np.pi, 10):
    ax2.plot(th, np.sin(th + j))

ax2.set_xlim(0, 2*np.pi)

Vorgeschlagener Farbzyklus #