Как cmap работает в seaborn и как изменить binning? - PullRequest
0 голосов
/ 03 марта 2020

Источником вдохновения для этого вопроса являются разрывы в pheatmap в R . Вопрос в том, могу ли я определить, насколько «грубо», насколько непрерывно / дискретно моя окраска и биннинг в тепловой карте Морского Рога. Я нашел способ сделать это, используя cmap и количество используемых цветов (например, Дискретная легенда на графике тепловых карт морского побережья ). Однако я понятия не имею, как выполняется присвоение этим группам цветов.


Итак, вопросы : , , как складываются данные , если я использую cmap и заставить seaborn использовать только дискретный набор цветов = корзины? Как я могу установить его вручную ? Например. в случае R я могу установить разрывы от 0 до 800 с шагом 100 и передать его аргументу "breaks".

breaksList = seq (0, 800, by = 100)

Довольно просто использовать cmap и количество цветов, если моя шкала линейна, но если я хотел бы, чтобы мои ячейки = colorbar logarithmi c или просто не были расположены на равных расстояниях , как бы я это сделал?


Чтобы привести конкретный пример, позвольте мне привести пример набора данных о рейсах. Слева находится исходный график по умолчанию, справа я выбираю 5 цветов, чтобы иметь 5 корзин. Итак, как определяются края этих корзин? Могу ли я сбросить их, чтобы у меня, например. бункеры 0-200, 200-300, 300-400, 400-600, выше 600? (Я намеренно использую неравные корзины, чтобы показать, что я имею в виду.)

# choose 5 colours to create 5 bins
cmap = sns.color_palette('rocket', n_colors=5)

# run this without the cmap argument to get the first image
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights, cmap = cmap)

Original heatmap WITHOUT using cmap. Heatmap with 5 discrete sections created using cmap and choosing 5 colours.

Спасибо.

1 Ответ

2 голосов
/ 03 марта 2020

Кажется, в seaborn есть ошибка, которая мешает правильной работе представленной ниже идеи, поэтому возвращаемся к чистой matplotlib:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors
import seaborn as sns
# choose 5 colours to create 5 bins
colors = sns.color_palette('rocket', 5)
levels = [0, 200, 300, 400, 600]
cmap, norm = matplotlib.colors.from_levels_and_colors(levels, colors, extend="max")

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")

fig, ax = plt.subplots()
im = ax.imshow(flights.values, cmap = cmap, norm=norm)
ax.set(xticks=range(flights.shape[1]), yticks=range(flights.shape[0]),
       xticklabels=flights.columns, yticklabels=flights.index)
ax.tick_params(axis="x", rotation=90)
fig.colorbar(im, ax=ax, spacing="propotional")

plt.show()

enter image description here

...