Python cmap在seaborn中如何工作,以及如何更改装箱?

Python cmap在seaborn中如何工作,以及如何更改装箱?,python,r,seaborn,heatmap,Python,R,Seaborn,Heatmap,这个问题的灵感来源于插队。问题是,我是否能定义seaborn的热图中的“粗糙度”、着色和装箱的连续性/离散性。我已经找到了一种方法,如何使用cmap和使用的颜色数(例如)。然而,我不知道这些颜色组的分配是如何完成的 因此,问题是,如果我使用cmap并强制seaborn仅使用一组离散的颜色=箱,数据如何分类?如何手动设置它?在R的情况下,我可以通过100步将断点设置为0到800,并将其传递给“breaks”参数 breaksList=seq(0800,by=100) 如果我的刻度是线性的,那么使

这个问题的灵感来源于插队。问题是,我是否能定义seaborn的热图中的“粗糙度”、着色和装箱的连续性/离散性。我已经找到了一种方法,如何使用cmap和使用的颜色数(例如)。然而,我不知道这些颜色组的分配是如何完成的


因此,问题是如果我使用cmap并强制seaborn仅使用一组离散的颜色=箱,数据如何分类?如何手动设置它?在R的情况下,我可以通过100步将断点设置为0到800,并将其传递给“breaks”参数

breaksList=seq(0800,by=100)

如果我的刻度是线性的,那么使用cmap和颜色数非常简单,但是如果我想让我的bins=colorbar对数,或者只是不是等距的,我会怎么做


为了给出一个具体的例子,让我举一个飞行数据集的例子。左边是原始的默认绘图,右边我选择了5种颜色,有5个箱子。那么如何定义这些箱子的边缘呢?我是否可以重置它们,以便在600以上有0-200、200-300、300-400、400-600个垃圾箱? (我故意使用不同的箱子来表达我的意思。)


谢谢。

似乎seaborn中有一个bug阻止了以下想法的正确运行,所以回到纯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()

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()