Ricerca…


Utilizzo di base

Usare le mappe dei colori built-in è semplice come passare il nome della mappa di colori richiesta (come indicato nel riferimento a colormap ) alla funzione di pcolormesh (come pcolormesh o contourf ) che si aspetta, solitamente sotto forma di un argomento della parola chiave cmap :

import matplotlib.pyplot as plt
import numpy as np

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

esempio più semplice

I colormap sono particolarmente utili per visualizzare i dati tridimensionali su grafici bidimensionali, ma una buona mappa colori può anche rendere molto più chiara una trama tridimensionale appropriata:

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()

un po 'più avanzato di esempio

Utilizzo di mappe colori personalizzate

A parte le mappe di colori incorporate definite nel riferimento colormaps (e le loro mappe invertite, con '_r' aggiunto al loro nome), è anche possibile definire mappe di colori personalizzate. La chiave è il modulo matplotlib.cm .

L'esempio seguente definisce una mappa di colori molto semplice che utilizza cm.register_cmap , contenente un singolo colore, con l'opacità (valore alfa) del colore che interpola tra completamente opaco e completamente trasparente nell'intervallo di dati. Si noti che le linee importanti dal punto di vista della mappa di colori sono l'importazione di cm , la chiamata a register_cmap e il passaggio della mappa di colori 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()

esempio con sfumatura alpha

In scenari più complicati, è possibile definire un elenco di valori R / G / B (/ A) in cui matplotlib interpola linearmente per determinare i colori utilizzati nei grafici corrispondenti.

Mappe colore percettualmente uniformi

La colorazione predefinita predefinita di MATLAB (sostituita nella versione R2014b) chiamata jet è onnipresente per il suo alto contrasto e familiarità (ed era il default di matplotlib per ragioni di compatibilità). Nonostante la sua popolarità, le mappe di colori tradizionali hanno spesso delle lacune quando si tratta di rappresentare i dati con precisione. Il cambiamento percepito in questi colori non corrisponde ai cambiamenti nei dati; e una conversione della mappa dei colori in scala di grigi (ad esempio stampando una figura usando una stampante in bianco e nero) potrebbe causare la perdita di informazioni.

Sono state introdotte mappe di colori percettualmente uniformi per rendere la visualizzazione dei dati il ​​più accurata e accessibile possibile. Matplotlib ha introdotto quattro nuovi colormap percettivamente uniformi nella versione 1.5, con uno di essi (denominato viridis ) come predefinito dalla versione 2.0. Queste quattro colormap ( viridis , inferno , plasma e magma ) sono tutte ottimali dal punto di vista della percezione e dovrebbero essere utilizzate per la visualizzazione dei dati per impostazione predefinita, a meno che non ci siano ottime ragioni per non farlo. Queste colormap introducono il più piccolo pregiudizio possibile (non creando caratteristiche dove non ce ne sono per cominciare), e sono adatte per un pubblico con una percezione del colore ridotta.

Come esempio per distorcere visivamente i dati, prendi in considerazione i seguenti due diagrammi di vista dall'alto di oggetti simili a piramide:

due oggetti simili a piramide dall'alto

Quale delle due è una piramide corretta? La risposta è ovviamente che entrambi sono, ma questo è tutt'altro che ovvio dalla trama che usa la mappa jet colori del jet :

Vista 3D delle piramidi con i due colormaps, jet vs viridis

Questa caratteristica è al centro dell'uniformità percettiva.

Mappa discreta personalizzata

Se hai intervalli predefiniti e desideri utilizzare colori specifici per tali intervalli, puoi dichiarare la mappa colori personalizzata. Per esempio:

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

Uscita di esempio

Color i verrà utilizzato per valori compresi tra confine iei + 1. I colori possono essere specificati con i nomi ( 'red' , 'green' ), i codici HTML ( '#ffaa44' , '#441188' ) o le tuple RGB ( (0.2, 0.9, 0.45) ).



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow