Buscar..


Uso básico

El uso de pcolormesh contourf integrados es tan simple como pasar el nombre del mapa de colores requerido (como se indica en la referencia de pcolormesh contourf ) a la función de trazado (como pcolormesh o contourf ) que lo espera, generalmente en la forma de un argumento de palabra clave cmap :

import matplotlib.pyplot as plt
import numpy as np

plt.figure()
plt.pcolormesh(np.random.rand(20,20),cmap='hot')
plt.show()

ejemplo mas simple

Los mapas de colores son especialmente útiles para visualizar datos tridimensionales en gráficos bidimensionales, pero un buen mapa de colores también puede hacer que un gráfico tridimensional adecuado sea mucho más claro:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import LinearLocator

# generate example data
import numpy as np
x,y = np.meshgrid(np.linspace(-1,1,15),np.linspace(-1,1,15))
z = np.cos(x*np.pi)*np.sin(y*np.pi)

# actual plotting example
fig = plt.figure()
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_surface(x,y,z,rstride=1,cstride=1,cmap='viridis')
ax2 = fig.add_subplot(122)
cf = ax2.contourf(x,y,z,51,vmin=-1,vmax=1,cmap='viridis')
cbar = fig.colorbar(cf)
cbar.locator = LinearLocator(numticks=11)
cbar.update_ticks()
for ax in {ax1, ax2}:
    ax.set_xlabel(r'$x$')
    ax.set_ylabel(r'$y$')
    ax.set_xlim([-1,1])
    ax.set_ylim([-1,1])
    ax.set_aspect('equal')

ax1.set_zlim([-1,1])
ax1.set_zlabel(r'$\cos(\pi x) \sin(\p    i y)$')

plt.show()

ejemplo un poco más avanzado

Usando colormaps personalizados

Además de los mapas de '_r' incorporados definidos en la referencia de mapas de colores (y sus mapas invertidos, con '_r' anexada a su nombre), también se pueden definir mapas de '_r' personalizados. La clave es el módulo matplotlib.cm .

El siguiente ejemplo define un mapa de cm.register_cmap muy simple que utiliza cm.register_cmap , que contiene un solo color, con la opacidad (valor alfa) del color que se interpola entre totalmente opaco y completamente transparente en el rango de datos. Tenga en cuenta que las líneas importantes desde el punto de vista del mapa de colores son la importación de cm , la llamada a register_cmap y el paso del mapa de plot_surface a plot_surface .

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.cm as cm

# generate data for sphere
from numpy import pi,meshgrid,linspace,sin,cos
th,ph = meshgrid(linspace(0,pi,25),linspace(0,2*pi,51))
x,y,z = sin(th)*cos(ph),sin(th)*sin(ph),cos(th)

# define custom colormap with fixed colour and alpha gradient
# use simple linear interpolation in the entire scale
cm.register_cmap(name='alpha_gradient',
                 data={'red':   [(0.,0,0),
                                 (1.,0,0)],

                       'green': [(0.,0.6,0.6),
                                 (1.,0.6,0.6)],

                       'blue':  [(0.,0.4,0.4),
                                 (1.,0.4,0.4)],

                       'alpha': [(0.,1,1),
                                 (1.,0,0)]})

# plot sphere with custom colormap; constrain mapping to between |z|=0.7 for enhanced effect
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x,y,z,cmap='alpha_gradient',vmin=-0.7,vmax=0.7,rstride=1,cstride=1,linewidth=0.5,edgecolor='b')
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.set_aspect('equal')

plt.show()

ejemplo con gradiente alfa

En escenarios más complicados, uno puede definir una lista de valores R / G / B (/ A) en los que matplotlib interpola linealmente para determinar los colores utilizados en los gráficos correspondientes.

Colormaps perceptualmente uniformes

El mapa de colores predeterminado original de MATLAB (reemplazado en la versión R2014b) llamado jet es ubicuo debido a su alto contraste y familiaridad (y fue el valor predeterminado de matplotlib por razones de compatibilidad). A pesar de su popularidad, los mapas de colores tradicionales a menudo tienen deficiencias cuando se trata de representar datos con precisión. El cambio percibido en estos mapas de colores no corresponde a cambios en los datos; y una conversión del mapa de colores a escala de grises (por ejemplo, al imprimir una figura utilizando una impresora en blanco y negro) puede causar la pérdida de información.

Se han introducido mapas de colores uniformes para que la visualización de los datos sea lo más precisa y accesible posible. Matplotlib introdujo cuatro nuevos mapas de color perceptualmente uniformes en la versión 1.5, con uno de ellos (llamado viridis ) como predeterminado de la versión 2.0. Estos cuatro mapas de color ( viridis , inferno , plasma y magma ) son óptimos desde el punto de vista de la percepción, y deben usarse para la visualización de datos por defecto, a menos que existan buenas razones para no hacerlo. Estos mapas de colores introducen el menor sesgo posible (al no crear funciones donde no hay ninguna para empezar), y son adecuados para una audiencia con una percepción de color reducida.

Como ejemplo para distorsionar visualmente los datos, considere las siguientes dos gráficas de vista superior de objetos similares a pirámides:

dos objetos piramidales desde la parte superior

¿Cuál de los dos es una pirámide adecuada? La respuesta es, por supuesto, que ambos lo son, pero esto dista mucho de ser obvio de la trama utilizando el mapa de colores de jet :

Vista 3D de las pirámides con los dos mapas de color, jet vs viridis

Esta característica está en el núcleo de la uniformidad perceptiva.

Mapa de colores discreto personalizado

Si tiene rangos predefinidos y desea usar colores específicos para esos rangos, puede declarar un mapa de colores personalizado. Por ejemplo:

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

x = np.linspace(-2,2,500)
y = np.linspace(-2,2,500)
XX, YY = np.meshgrid(x, y)
Z = np.sin(XX) * np.cos(YY)

cmap = colors.ListedColormap(['red', '#000000','#444444', '#666666', '#ffffff', 'blue', 'orange'])
boundaries = [-1, -0.9, -0.6, -0.3, 0, 0.3, 0.6, 1]
norm = colors.BoundaryNorm(boundaries, cmap.N, clip=True)

plt.pcolormesh(x,y,Z, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()

Produce

Salida de muestra

El color i se utilizará para los valores entre el límite i y i + 1 . Los colores se pueden especificar por nombres ( 'red' , 'green' ), códigos HTML ( '#ffaa44' , '#441188' ) o tuplas RGB ( (0.2, 0.9, 0.45) ).



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow