как установить последовательный положительный диапазон палитры с наименьшим значением в середине палитры

Я пытаюсь установить цветовую шкалу и понимаю, что с помощью Clim можно это сделать. Я не могу понять, как вы установите его так, чтобы среднее значение цветовой шкалы было наименьшим 1, например, в диапазоне от 1 до 52?

Я делаю это, потому что у меня есть номера недель, но я не хочу показывать большие скачки цвета с декабря по январь (значения 52 и 1)

РЕДАКТИРОВАТЬ: я говорю о цветах, чтобы концы цветовой шкалы были похожи по цвету, но середина - это самый другой цвет. Я не хочу менять значения на палитре


person pwprnt    schedule 01.06.2018    source источник
comment
Ваш вопрос действительно не имеет смысла! Как по логике сделать середину диапазона минимальной? Прыжок будет, несмотря ни на что.   -  person anishtain4    schedule 01.06.2018
comment
@ anishtain4, кажется, он говорит о цветах. но я не знаю, как использовать clim   -  person bobrobbob    schedule 01.06.2018
comment
поэтому вам нужно, чтобы цвета были np.abs(week-26) вместо week, но вы не хотите изменять значения. Можете хотя бы показать сюжет или что-то из того, что сейчас происходит и чего вы ждете?   -  person anishtain4    schedule 01.06.2018


Ответы (2)


То, что вы просите, - это циклическая палитра. На данный момент matplotlib предоставляет только одну циклическую цветовую карту, а именно "hsv". Однако вы можете легко определить свою собственную цветовую карту и убедиться, что она циклична, например используя цвета ["gold", "red", "black", "navy", "gold"], где первый и последний цвета совпадают.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
plt.rcParams['lines.markersize'] = 12

x = np.arange(200)
y = np.ones(200)

fig, ax = plt.subplots()
ax.scatter(x,y, c=x % 52, marker="|" )

ax.scatter(x,y-1, c=x % 52, cmap="hsv", marker="|" )

colors = ["gold", "red", "black", "navy", "gold"]
cmap = mcolors.LinearSegmentedColormap.from_list("", colors)
ax.scatter(x,y-2, c=x % 52, cmap=cmap, marker="|" )

ax.set_yticks([-1,0,1])
ax.set_yticklabels(["custom", "hsv", "viridis", ])
ax.margins(y=0.4)
plt.show()

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

person ImportanceOfBeingErnest    schedule 01.06.2018

вы не можете использовать clim для того, что хотите. вместо:

from matplotlib.colors import ListedColormap
from matplotlib.cm import get_cmap
inferno = get_cmap('inferno').colors
new_cmap = ListedColormap(inferno+inferno[::-1])

cmap по центру

person bobrobbob    schedule 02.06.2018
comment
Кажется, этот ответ объясняет, как использовать clim, что может быть полезно для некоторых людей, но как именно это связано с вопросом? - person ImportanceOfBeingErnest; 02.06.2018
comment
намного лучше ;-) - person ImportanceOfBeingErnest; 02.06.2018