You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的Seaborn绘制三类分级且按数量降序的热力图?

使用Seaborn实现目标热力图

完全可以用Seaborn实现这类需求,下面是具体步骤和代码示例:

1. 数据预处理

先统计每个类别的数量,再将所有数据点按类别数量降序重新排列(数量最多的类别数据点排在最左侧)。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 模拟数据集(替换成你实际的数据)
data = ["类别1"]*10 + ["类别2"]*8 + ["类别3"]*6
df = pd.DataFrame({"类别": data})

# 统计类别数量
counts = df["类别"].value_counts()
# 按类别数量降序排列数据点
sorted_data = df["类别"].sort_values(key=lambda x: x.map(counts), ascending=False).values
# 转换为1行24列的矩阵,适配热力图输入格式
heatmap_data = sorted_data.reshape(1, -1)

2. 自定义颜色映射

为每个类别分配不同深浅的颜色,数量越多颜色越深:

# 生成同一色系的深浅色,数量多的类别对应深色
palette = sns.color_palette("Blues", n_colors=len(counts))
category_color_map = dict(zip(counts.index, palette[::-1]))  # 反转调色盘,让多数量对应深色

3. 绘制热力图

用Seaborn的heatmap函数结合自定义规则实现需求:

plt.figure(figsize=(12, 2))

# 将类别转换为数值,用于映射颜色
category_num_map = dict(zip(counts.index, range(len(counts), 0, -1)))
num_data = [[category_num_map[cat] for cat in row] for row in heatmap_data]

sns.heatmap(num_data,
            cmap=sns.color_palette("Blues", n_colors=len(counts)),
            cbar=True,
            xticklabels=False,
            yticklabels=False,
            annot=False)

plt.title("类别热力图(按数量降序排列)")
plt.show()

关键说明

  • 数据排序:通过sort_values结合类别数量映射,保证数量多的类别数据点排在左侧
  • 颜色控制:利用Seaborn调色盘自动生成同色系深浅色,也可手动指定每个类别的颜色值
  • 热力图适配:设置合适的画布尺寸,隐藏冗余刻度,让每个数据点的颜色清晰展示

内容的提问来源于stack exchange,提问作者Avatarvatar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:37:47