Поиск…


Основное использование

Использование встроенных цветовых папок так же просто, как передача имени требуемой цветовой карты (как указано в ссылке contourf ) функции построения графика (например, pcolormesh или contourf ), которая ожидает ее, как правило, в виде аргумента ключевого слова cmap :

import matplotlib.pyplot as plt
import numpy as np

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

простейший пример

Колларды особенно полезны для визуализации трехмерных данных на двумерных графиках, но хорошая цветовая карта также может сделать правильный трехмерный график намного яснее:

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

бит более продвинутый пример

Использование пользовательских цветовых палитр

Помимо встроенных цветовых кодов, определенных в ссылке colormaps (и их обратных картах, при добавлении '_r' к их имени), могут также быть определены пользовательские цветовые карты. Ключом является модуль matplotlib.cm .

В приведенном ниже примере определяется очень простая cm.register_cmap , использующая cm.register_cmap , содержащую один цвет, с непрозрачностью (альфа-значение) интерполяции цвета между полностью непрозрачным и полностью прозрачным в диапазоне данных. Обратите внимание, что важными линиями с точки зрения цветовой карты являются импорт cm , вызов register_cmap и прохождение plot_surface карты в 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()

пример с альфа-градиентом

В более сложных сценариях можно определить список значений R / G / B (/ A), в которые matplotlib интерполирует линейно, чтобы определить цвета, используемые на соответствующих графиках.

Порядочно однородные цветовые карты

Исходная по умолчанию цветовая карта MATLAB (замененная в версии R2014b), называемая jet является повсеместной из-за ее высокой контрастности и знакомости (и по умолчанию была использована matplotlib по соображениям совместимости). Несмотря на свою популярность, традиционные цветовые карты часто имеют недостатки, когда дело доходит до представления данных точно. Произошедшее изменение в этих цветовых картах не соответствует изменениям данных; и преобразование цветовой карты в оттенки серого (например, путем печати фигуры с использованием черно-белого принтера) может привести к потере информации.

Были введены единые цветовые карты с восприятием, чтобы сделать визуализацию данных максимально точной и доступной. Matplotlib представила четыре новых, перцепционно однородных цветовых паттерна в версии 1.5, причем один из них (по имени viridis ) был по умолчанию от версии 2.0. Эти четыре цветовые карты ( viridis , inferno , plasma и magma ) являются оптимальными с точки зрения восприятия, и они должны использоваться для визуализации данных по умолчанию, если только нет веских причин не делать этого. Эти цветовые карты вводят как можно меньше предвзятости (не создавая функций, где их нет), и они подходят для аудитории с уменьшенным восприятием цвета.

В качестве примера для визуального искажения данных рассмотрим следующие два сюжета верхнего плана пирамидоподобных объектов:

два пирамидальных объекта сверху

Какая из двух является правильной пирамидой? Ответ конечно, что оба они есть, но это далеко не очевидно из сюжета, использующего jet карту:

3D-вид пирамид с двумя цветовыми картами, jet vs viridis

Эта особенность лежит в основе единообразия восприятия.

Пользовательская дискретная цветовая палитра

Если у вас есть предопределенные диапазоны и вы хотите использовать определенные цвета для этих диапазонов, вы можете объявить пользовательскую цветовую палитру. Например:

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

Производит

Образец вывода

Цвет i будет использоваться для значений между границами i и i + 1 . Цвета могут быть указаны по именам ( 'red' , 'green' ), HTML-коды ( '#ffaa44' , '#441188' ) или кортежи RGB ( (0.2, 0.9, 0.45) ).



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow