如何在 Python 的热图中指定我自己的标准

How to specify my own criteria in a HeatMap in Python

我正在尝试使用 seaborn 库绘制热图。我正在关注 this tutorial.

现在我很挣扎,因为我想制作一个“自定义过滤器”。让我解释一下。

我有这个输入数据:

             district_name  population_density  hasRecyclingPoint
0                    Centro           25340.69             0
1                Arganzuela           23306.44             1
2                    Retiro           21867.53             0
3                 Salamanca           26830.78             0
4                 Chamartín           15723.25             0
5                    Tetuan           28664.25             0
6                  Chamberí           29049.26             0
7       Fuencarral-El Pardo            1003.00             1
8           Moncloa-Aravaca            2515.26             1
9                    Latina            9183.75             1
10              Carabanchel           17316.88             1
11                    Usera           17535.32             1
12       Puente de Vallecas           15345.01             1
13                Moratalaz           15493.59             1
14            Ciudad Lineal           18455.56             1
15                Hortaleza            6973.33             1
16               Villaverde            7059.13             1
17        Villa de Vallecas            2026.82             1
18                Vicálvaro            1981.11             0
19      San Blas-Canillejas            6934.37             1
20                  Barajas            1076.06             1

我想要做的是根据以下条件创建一个热图:

例如,分配给第一种调色板颜色的人口少于 5000 的地区。然后将 <10000 的地区分配给下一个更热的颜色,依此类推。

希望我解释得足够好。

不太清楚你所说的更热是什么意思,是否是不同列的两种不同配色方案。这是来自 的修改代码,我将冷暖分成 2 种配色方案。越低,用于第一列,第二列越热:

import matplotlib.pyplot as plt
import seaborn as sns

c1 = sns.color_palette("coolwarm")[:4]
c2 = sns.color_palette("coolwarm")[4:]

f, axs = plt.subplots(1,2, figsize=(5, 8))

sns.heatmap(df[['population_density']], yticklabels=df['district_name'],
            annot=True, fmt='.2f', ax=axs[0], cmap=c1)
sns.heatmap(df[['hasRecyclingPoint']], yticklabels=df['district_name'],
            annot=True, fmt='.2f', ax=axs[1], cmap=c2,
            cbar_kws={"shrink": .2})
axs[1].yaxis.set_ticks([])

colorbar = axs[1].collections[0].colorbar
colorbar.set_ticks([0.25,0.75])
colorbar.set_ticklabels(['0', '1'])

f.tight_layout()

数据框:

{'district_name': {0: 'Centro',
  1: 'Arganzuela',
  2: 'Retiro',
  3: ' Salamanca',
  4: ' Chamartín',
  5: 'Tetuan',
  6: 'Chamberí',
  7: ' Fuencarral-El Pardo',
  8: ' Moncloa-Aravaca',
  9: 'Latina',
  10: 'Carabanchel',
  11: 'Usera',
  12: ' Puente de Vallecas',
  13: 'Moratalaz',
  14: 'Ciudad Lineal',
  15: 'Hortaleza',
  16: ' Villaverde',
  17: 'Villa de Vallecas',
  18: 'Vicálvaro',
  19: 'San Blas-Canillejas',
  20: 'Barajas'},
 'population_density': {0: 25340.69,
  1: 23306.44,
  2: 21867.53,
  3: 26830.78,
  4: 15723.25,
  5: 28664.25,
  6: 29049.26,
  7: 1003.0,
  8: 2515.26,
  9: 9183.75,
  10: 17316.88,
  11: 17535.32,
  12: 15345.01,
  13: 15493.59,
  14: 18455.56,
  15: 6973.33,
  16: 7059.13,
  17: 2026.82,
  18: 1981.11,
  19: 6934.37,
  20: 1076.06},
 'hasRecyclingPoint': {0: 0,
  1: 1,
  2: 0,
  3: 0,
  4: 0,
  5: 0,
  6: 0,
  7: 1,
  8: 1,
  9: 1,
  10: 1,
  11: 1,
  12: 1,
  13: 1,
  14: 1,
  15: 1,
  16: 1,
  17: 1,
  18: 0,
  19: 1,
  20: 1}}