Подтвердить что ты не робот

Как создать стандартную панель цветов для ряда графиков в python

Я использую matplotlib для построения некоторых данных в python, и для графиков требуется стандартная панель цветов. Данные состоят из серии NxM-матриц, содержащих частотную информацию, так что простой график imshow() дает двумерную гистограмму с цветом, описывающим частоту. Каждая матрица содержит данные в разных, но перекрывающихся диапазонах. Imshow нормализует данные в каждой матрице до диапазона 0-1, что означает, что, например, график матрицы A будет казаться идентичным графику матрицы 2 * A (хотя цветовая полоса будет показывать двойные значения). Я бы хотел, чтобы красный цвет, например, соответствовал той же частоте во всех графиках. Другими словами, для всех графиков достаточно одной цветовой полосы. Любые предложения были бы с благодарностью.

4b9b3361

Ответ 1

Не украсть ответ @ianilis, но я хотел добавить пример...

Существует несколько способов, но проще всего указать vmin и vmax kwargs на imshow. В качестве альтернативы вы можете создать экземпляр matplotlib.cm.Colormap и указать его, но более сложную, чем это необходимо для простых случаев.

Вот пример с одним цветом для всех изображений:

import numpy as np
import matplotlib.pyplot as plt

# Generate some data that where each slice has a different range
# (The overall range is from 0 to 2)
data = np.random.random((4,10,10))
data *= np.array([0.5, 1.0, 1.5, 2.0])[:,None,None]

# Plot each slice as an independent subplot
fig, axes = plt.subplots(nrows=2, ncols=2)
for dat, ax in zip(data, axes.flat):
    # The vmin and vmax arguments specify the color limits
    im = ax.imshow(dat, vmin=0, vmax=2)

# Make an axis for the colorbar on the right side
cax = fig.add_axes([0.9, 0.1, 0.03, 0.8])
fig.colorbar(im, cax=cax)

plt.show()

enter image description here

Ответ 2

Самое простое решение - вызвать clim (lower_limit, upper_limit) с теми же аргументами для каждого графика.

Ответ 3

Это единственный ответ на половину вопроса, вернее, новый. Если вы измените

data *= np.array([0.5, 1.0, 1.5, 2.0])[:,None,None]

к

data *= np.array([2.0, 1.0, 1.5, 0.5])[:,None,None]

ваша цветная панель будет идти от 0 до 0,5, которая в этом случае будет синей до слегка светло-голубой и не будет охватывать весь диапазон (от 0 до 2). Цветная панель отображает только цвета с последнего изображения или контура независимо от vmin и vmax.