См. разделы Imshow с той же цветовой полосой и Установите диапазон цветовых полос в matplotlib.
Если вы используете одни и те же vmin
/vmax
и cmap
во всех вызовах imshow, цвета должны отражать одинаковую интенсивность, независимо от общего диапазона изображения.
Изменить: добавлен пример после комментариев. Возможно, я неправильно понял, в чем проблема, но код/изображение иллюстрируют, как можно установить ограничения v для соответствия цветам (верхний ряд) или что произойдет, если каждое изображение будет автоматически нормализовано (нижний ряд).
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
offset = 5.5
x1 = np.random.rand(12,16) + offset
x2 = np.array(x1)
x2 = np.zeros((15, 20))
x2[2:2+x1.shape[0], 3:3+x1.shape[1]] = x1
vmin = x1.min()
vmax = x1.max()
cmap = cm.hot
plt.figure(1); plt.clf()
f, ax = plt.subplots(2,2, num=1)
im0 = ax[0,0].imshow(x1, interpolation='nearest', cmap=cmap, vmin=vmin, vmax=vmax)
f.colorbar(im0, ax=ax[0,0])
im1 = ax[0,1].imshow(x2, interpolation='nearest', cmap=cmap, vmin=vmin, vmax=vmax)
f.colorbar(im1, ax=ax[0,1])
ax[0,1].set_title('image with border, sharing v lims')
im2 = ax[1,0].imshow(x1, interpolation='nearest', cmap=cmap)
f.colorbar(im2, ax=ax[1,0])
im3 = ax[1,1].imshow(x2, interpolation='nearest', cmap=cmap)
f.colorbar(im3, ax=ax[1,1])
ax[1,1].set_title('image with border, own v lims')
f.show()
Примечание. Проблема проявляется только в том случае, если ненулевой цветовой диапазон не включает ноль. Это показано с помощью переменной offset
выше.
person
Bonlenfum
schedule
18.02.2014