Suche…


Grundlegende Verwendung

Die Verwendung von eingebauten Colormaps besteht einfach darin, den Namen der erforderlichen Colormap (wie in der Colormaps-Referenz angegeben ) an die pcolormesh Funktion (wie pcolormesh oder contourf ) zu übergeben, die dies erwartet, normalerweise in Form eines cmap Schlüsselwortarguments:

import matplotlib.pyplot as plt
import numpy as np

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

einfachstes Beispiel

Colormaps sind besonders nützlich, um dreidimensionale Daten in zweidimensionalen Darstellungen zu visualisieren, eine gute Farbkarte kann jedoch auch eine korrekte dreidimensionale Darstellung viel klarer machen:

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

etwas fortgeschritteneres Beispiel

Benutzerdefinierte Colormaps verwenden

Neben den integrierten Colormaps, die in der Colormaps-Referenz definiert sind (und deren umgekehrten Maps, an deren Namen '_r' angehängt ist), können auch benutzerdefinierte Colormaps definiert werden. Der Schlüssel ist das matplotlib.cm Modul.

Das folgende Beispiel definiert eine sehr einfache Farbzuordnung mit cm.register_cmap , die eine einzelne Farbe enthält, wobei die Opazität (Alpha-Wert) der Farbe im Datenbereich zwischen vollständig undurchsichtig und vollständig transparent interpoliert wird. Beachten Sie, dass die wichtigsten Linien aus Sicht der Colormap der Import von cm , der Aufruf von register_cmap und die Übergabe der Colormap an 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()

Beispiel mit Alpha-Gradient

In komplizierteren Szenarien kann eine Liste von R / G / B (/ A) -Werten definiert werden, in die Matplotlib linear interpoliert, um die in den entsprechenden Plots verwendeten Farben zu bestimmen.

Wahrnehmungsmäßig einheitliche Farbkarten

Die ursprüngliche Standardfarbkarte von MATLAB (ersetzt in Version R2014b) mit dem Namen jet ist aufgrund ihres hohen Kontrasts und ihrer Bekanntheit allgegenwärtig (und war aus Kompatibilitätsgründen die Standardeinstellung von Matplotlib). Trotz seiner Beliebtheit weisen herkömmliche Colormaps häufig Mängel auf, wenn es darum geht, Daten genau darzustellen. Die wahrgenommene Änderung in diesen Colormaps entspricht nicht den Datenänderungen. und eine Konvertierung der Farbkarte in Graustufen (z. B. durch Drucken einer Abbildung mit einem Schwarzweißdrucker) kann zu Informationsverlust führen.

Perzeptuell einheitliche Colormaps wurden eingeführt, um die Datenvisualisierung so genau und zugänglich wie möglich zu machen. Matplotlib hat in Version 1.5 vier neue, perzeptuell einheitliche Colormaps eingeführt , von denen eine (namens viridis ) der Standard von Version 2.0 ist. Diese vier Farbkarten ( viridis , inferno , plasma und magma ) sind alle aus Sicht der Wahrnehmung optimal. Diese sollten standardmäßig für die Datenvisualisierung verwendet werden, es sei denn, es gibt sehr gute Gründe, dies nicht zu tun. Diese Colormaps führen so wenig Verzerrung wie möglich aus (indem keine Features erstellt werden, für die es anfangs keine gibt), und sie eignen sich für ein Publikum mit eingeschränkter Farbwahrnehmung.

Betrachten Sie als Beispiel für die visuelle Verzerrung von Daten die folgenden zwei Draufsichtdiagramme von pyramidenartigen Objekten:

zwei pyramidenartige Gegenstände von oben

Welche der beiden ist eine richtige Pyramide? Die Antwort ist natürlich, dass beide das sind, aber dies ist bei der Darstellung mit der jet Colormap alles andere als offensichtlich:

3D-Ansicht der Pyramiden mit den zwei Colormaps, Jet vs Viridis

Dieses Merkmal ist der Kern der Wahrnehmungsgleichförmigkeit.

Benutzerdefinierte diskrete Colormap

Wenn Sie vordefinierte Bereiche festgelegt haben und bestimmte Farben für diese Bereiche verwenden möchten, können Sie eine benutzerdefinierte Farbzuordnung festlegen. Zum Beispiel:

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

Produziert

Beispielausgabe

Die Farbe i wird für Werte zwischen der Grenze i und i + 1 verwendet . Farben können durch Namen ( 'red' , 'green' ), HTML-Codes ( '#ffaa44' , '#441188' ) oder RGB-Tupel ( (0.2, 0.9, 0.45) ) angegeben werden.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow