Szukaj…


Podstawowe użycie

Za pomocą wbudowanego w colormaps jest tak proste jak przepuszczenie nazwę wymaganego colormap (jak podano w odniesienie colormaps ) do wykreślania funkcji (takich jak pcolormesh lub contourf ), że spodziewa się, zwykle w postaci cmap argumentu słowa kluczowego:

import matplotlib.pyplot as plt
import numpy as np

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

najprostszy przykład

Mapy kolorów są szczególnie przydatne do wizualizacji danych trójwymiarowych na wykresach dwuwymiarowych, ale dobra mapa kolorów może również uczynić prawidłowy wykres trójwymiarowy znacznie wyraźniejszym:

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

nieco bardziej zaawansowany przykład

Korzystanie z niestandardowych map kolorów

Oprócz wbudowanych mapowań kolorów zdefiniowanych w odwołaniu do map kolorów (i ich odwróconych map z '_r' w nazwie), można również zdefiniować niestandardowe mapy kolorów. Kluczem jest moduł matplotlib.cm .

Poniższy przykład definiuje bardzo prostą cm.register_cmap kolorów za pomocą cm.register_cmap , zawierającą jeden kolor, z nieprzezroczystością (wartością alfa) koloru interpolującą pomiędzy całkowicie nieprzezroczystym i całkowicie przezroczystym w zakresie danych. Zauważ, że ważnymi liniami z punktu widzenia mapy kolorów są import cm , wywołanie register_cmap i przekazanie plot_surface kolorów do 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()

przykład z gradientem alfa

W bardziej skomplikowanych scenariuszach można zdefiniować listę wartości R / G / B (/ A), w które matplotlib interpoluje liniowo w celu określenia kolorów używanych na odpowiednich wykresach.

Percepcyjnie jednolite colormaps

Oryginalna domyślna mapa kolorów MATLAB (zastąpiona w wersji R2014b) zwana jet jest wszechobecna ze względu na wysoki kontrast i znajomość (i była domyślna dla Matplotlib ze względu na kompatybilność). Pomimo popularności tradycyjne mapy kolorów często mają braki, jeśli chodzi o dokładne reprezentowanie danych. Dostrzegana zmiana w tych mapach kolorów nie odpowiada zmianom danych; a konwersja mapy kolorów do skali szarości (na przykład poprzez wydrukowanie postaci za pomocą czarno-białej drukarki) może spowodować utratę informacji.

Wprowadzono percepcyjnie jednolite mapy kolorów, aby wizualizacja danych była jak najbardziej dokładna i dostępna. Matplotlib wprowadził cztery nowe, percepcyjnie jednolite colormaps w wersji 1.5, z których jedna (o nazwie viridis ) ma być domyślną wersją od 2.0. Te cztery mapy kolorów ( viridis , inferno , plasma i magma ) są optymalne z punktu widzenia percepcji i powinny być domyślnie wykorzystywane do wizualizacji danych, chyba że istnieją bardzo dobre powody, aby tego nie robić. Te mapy kolorów wprowadzają jak najmniej stronniczości (nie tworząc funkcji tam, gdzie ich nie ma na początek) i są odpowiednie dla odbiorców o zmniejszonym postrzeganiu kolorów.

Jako przykład wizualnie zniekształcających dane, rozważ następujące dwa wykresy obiektów piramidalnych w widoku z góry:

dwa piramidalne obiekty z góry

Który z nich jest właściwą piramidą? Odpowiedź jest oczywiście taka, że obie są, ale nie jest to wcale oczywiste z fabuły używającej jet colormap:

Widok 3D piramid z dwoma colormaps, jet vs viridis

Ta cecha leży u podstaw jednolitości percepcyjnej.

Niestandardowa dyskretna mapa kolorów

Jeśli masz predefiniowane zakresy i chcesz użyć określonych kolorów dla tych zakresów, możesz zadeklarować niestandardową mapę kolorów. Na przykład:

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

Produkuje

Próbka wyjściowa

Kolor i zostanie użyty dla wartości między granicą i i i + 1 . Kolory można określić według nazw ( 'red' , 'green' ), kodów HTML ( '#ffaa44' , '#441188' ) lub krotek RGB ( (0.2, 0.9, 0.45) ).



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow