Cambiamenti di colore predefiniti #
Come discusso a lungo altrove [inserire collegamenti], jet
è una mappa colori empiricamente errata e non dovrebbe essere la mappa colori predefinita. A causa della posizione secondo cui la modifica dell'aspetto della trama interrompe la compatibilità con le versioni precedenti, questo cambiamento è stato rimandato molto più a lungo di quanto avrebbe dovuto essere. Oltre a modificare la mappa dei colori predefinita, intendiamo cogliere l'occasione per modificare il ciclo di colori predefinito sui grafici e adottare una mappa dei colori diversa per i grafici pieni ( imshow
,
pcolor
, contourf
, ecc.) e per i grafici a dispersione.
Mappa colori predefinita della mappa di calore #
La scelta di una nuova mappa dei colori è un terreno fertile per l'eliminazione delle biciclette ("No, dovrebbe essere _questo_ colore"), quindi abbiamo proposto una serie di criteri (tramite Nathaniel Smith) per valutare le mappe dei colori proposte.
dovrebbe essere una mappa di colori sequenziale, perché le mappe di colori divergenti sono davvero fuorvianti a meno che tu non sappia dove si trova il "centro" dei dati, e per una mappa di colori predefinita generalmente non lo faremo.
dovrebbe essere percettivamente uniforme, cioè, i giudizi soggettivi umani su quanto siano distanti i colori vicini dovrebbero corrispondere il più linearmente possibile alla differenza tra i valori numerici che rappresentano, almeno localmente.
dovrebbe avere una rampa di luminanza percettivamente uniforme, cioè se convertite in scala di grigi dovrebbe essere ancora uniforme. Questo è utile sia in termini pratici (le stampanti in scala di grigi esistono ancora!), sia perché la luminanza è un indizio molto forte e naturale per la grandezza.
dovrebbe anche avere qualche tipo di variazione di tonalità, perché la variazione di tonalità è un segnale aggiuntivo davvero utile alla percezione, avere due segnali è meglio di uno, e non c'è motivo per non farlo.
la variazione di tonalità dovrebbe essere scelta in modo da produrre risultati ragionevoli anche per gli spettatori con i tipi più comuni di daltonismo. (Il che esclude cose come il rosso al verde.)
Per i punti bonus, sarebbe bello scegliere una rampa di tonalità che funzioni ancora se si elimina la variazione di luminanza, perché in tal caso potremmo utilizzare la versione con luminanza variabile per i grafici 2D e la versione con la sola variazione di tonalità per i grafici 3D. (Nei grafici 3D vuoi davvero riservare il canale di luminanza per l'illuminazione/l'ombreggiatura, perché il tuo cervello è davvero bravo a estrarre la forma 3D dalla variazione di luminanza. Se la superficie 3D stessa ha una luminanza molto variabile, questo rovina la capacità di vedere la forma. )
Non violare alcun IP esistente
Script di esempio #
Mappe dei colori proposte #
Mappa colori dispersione predefinita #
Per applicazioni simili a mappe di calore può essere desiderabile coprire la maggior parte della scala di luminanza possibile, tuttavia quando si mappano i marcatori di colormapping, avere marcatori troppo vicini al bianco può essere un problema. Per questo motivo proponiamo di utilizzare una mappa dei colori diversa (ma forse correlata) alla mappa termica per i marcatori. I parametri di progettazione sono gli stessi di cui sopra, solo con una variazione di luminanza più limitata.
Script di esempio #
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)
Mappe dei colori proposte #
Ciclo colore / mappa colori qualitativa #
Quando si tracciano linee è spesso desiderabile tracciare più linee o artisti che devono essere distinguibili, ma non esiste un ordinamento intrinseco.
Script di esempio #
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)