Когда функция imshow используется для визуализации данных циклического характера, например В 24-часовом формате циклические цветные карты весьма полезны. Однако если imshow используется для масштабирования данных с помощью интерполяции, графики получаются не такими, как можно было бы ожидать.
См. ниже:
Код: Выделить всё
import numpy as np
import matplotlib.pyplot as plt
colormap = plt.cm.twilight_shifted
# Create an array with values between 0-3
arr = np.random.randint(0,4,size=[16,16])
# Create a smaller array with values between 20-23
patch = np.random.randint(20,24,size=[4,4])
# Insert the patch in the middle of the array
arr[6:10,6:10] = patch
# Visualize the array, without interpolation
plt.figure(figsize=[18,10])
plt.imshow(arr, cmap = colormap, aspect='auto', interpolation=None)
plt.colorbar()
# Visualize the array, with interpolation
plt.figure(figsize=[18,10])
plt.imshow(arr, cmap = colormap, aspect='auto', interpolation='bicubic')
plt.colorbar()
Нет интерполяции
Бикубическая интерполяция
Вы можете это видеть интерполяция создает белую линию между двумя группами значений, соответствующую значениям около 12. Однако, поскольку мы используем циклическую карту цветов, я бы на самом деле ожидал, что значения будут интерполированы между [0,3] и [20,23] группы должны быть черными. Я предполагаю, что это связано с тем, что методы интерполяции, реализованные в функции imshow, не учитывают цикличность карты цветов.
Есть идеи о том, как добиться правильной интерполяции для визуализации? Следует ли добавлять в matplotlib циклическую интерполяцию для циклических цветовых карт в качестве функции?
Подробнее здесь: https://stackoverflow.com/questions/662 ... color-maps
Мобильная версия