Cambios de color predeterminados #

Como se discutió extensamente en otro lugar [insertar enlaces], jetes un mapa de colores empíricamente malo y no debería ser el mapa de colores predeterminado. Debido a la posición de que cambiar la apariencia de la trama rompe la compatibilidad con versiones anteriores, este cambio se pospuso por mucho más tiempo del que debería haber sido. Además de cambiar el mapa de colores predeterminado, planeamos aprovechar la oportunidad para cambiar el ciclo de colores predeterminado en las parcelas y adoptar un mapa de colores diferente para las parcelas rellenas ( imshow, pcolor, contourf, etc.) y para las parcelas de dispersión.

Mapa de colores predeterminado del mapa de calor #

La elección de un nuevo mapa de colores es un terreno fértil para el despojo de bicicletas ("No, debería ser _este_ color"), por lo que tenemos un conjunto de criterios propuestos (a través de Nathaniel Smith) para evaluar los mapas de colores propuestos.

  • debe ser un mapa de colores secuencial, porque los mapas de colores divergentes son realmente engañosos a menos que sepa dónde está el "centro" de los datos, y para un mapa de colores predeterminado generalmente no lo sabremos.

  • debe ser perceptualmente uniforme, es decir, los juicios subjetivos humanos sobre qué tan separados están los colores cercanos deben corresponder lo más linealmente posible a la diferencia entre los valores numéricos que representan, al menos localmente.

  • debe tener una rampa de luminancia perceptiblemente uniforme, es decir, si convierte a escala de grises, aún debe ser uniforme. Esto es útil tanto en términos prácticos (¡las impresoras en escala de grises todavía existen!) como porque la luminancia es una señal muy fuerte y natural de la magnitud.

  • también debería tener algún tipo de variación en el matiz, porque la variación del matiz es una pista adicional realmente útil para la percepción, tener dos pistas es mejor que una, y no hay razón para no hacerlo.

  • la variación de tono debe elegirse para producir resultados razonables incluso para los espectadores con los tipos más comunes de daltonismo. (Lo que descarta cosas como rojo a verde).

  • Para puntos de bonificación, sería bueno elegir una rampa de tono que aún funcione si descarta la variación de luminancia, porque entonces podríamos usar la versión con luminancia variable para gráficos 2D y la versión con solo variación de tono para gráficos 3D. (En los gráficos 3D, realmente desea reservar el canal de luminancia para iluminación/sombreado, porque su cerebro es realmente bueno para extraer formas 3D de la variación de luminancia. Si la superficie 3D en sí tiene una luminancia que varía enormemente, esto arruina la capacidad de ver la forma. )

  • No infringir ninguna IP existente

Guión de ejemplo #

Mapas de colores propuestos #

Mapa de colores de dispersión predeterminado #

Para aplicaciones similares a mapas de calor, puede ser deseable cubrir la mayor parte posible de la escala de luminancia; sin embargo, cuando se asignan marcadores de color, tener marcadores demasiado cerca del blanco puede ser un problema. Por esa razón, proponemos usar un mapa de colores diferente (pero quizás relacionado) al mapa de calor para el basado en marcadores. Los parámetros de diseño son los mismos que los anteriores, solo que con una variación de luminancia más limitada.

Guión de ejemplo #

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)

Mapas de colores propuestos #

Ciclo de color / mapa de color cualitativo #

Al trazar líneas, con frecuencia es deseable trazar varias líneas o artistas que deben ser distinguibles, pero no hay un orden inherente.

Guión de ejemplo #

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)

Ciclo de color propuesto #