当前位置: 首页 > news >正文

用Python制作华夫图:从零开始

在数据分析和可视化中,华夫图(Waffle Chart)是一种非常直观的图表,它可以清晰地展示不同类别之间的比例关系。今天,我们将通过一个简单的例子,一步步教你如何用Python制作华夫图。即使你没有任何编程基础,也可以轻松上手!

一、什么是华夫图?

华夫图是一种类似于饼图的可视化工具,但它以网格的形式展示数据。每个小格子代表一个单位,不同颜色的格子表示不同的类别。它非常适合用来展示分类数据的比例关系,比如不同产品的市场份额、不同地区的销售占比等。

二、准备数据

在开始之前,我们需要准备一些数据。在这个例子中,我们假设有一个医学研究项目,记录了7名患者的临床特征数据。这些特征包括“Grade Group”(分级组)、“PSA”(前列腺特异性抗原水平)、“ICC”(是否存在某种病变)、“IDC”(肿瘤浸润深度)和“Stage”(疾病阶段)。这些数据已经整理成一个表格,如下所示:

相关数据准备
患者编号Grade GroupPSAICCIDCStage
ICC1Grade Group 2PSA<10 ng/mLPresent<pT3a<pT3b
ICC2Grade Group 3PSA>10 ng/mLAbsent<pT3a<pT3a
ICC3Grade Group 5PSA<10 ng/mLPresent<pT3b<pT3b
ICC4Grade Group 2PSA>10 ng/mLAbsent<pT3b<pT3a
ICC5Grade Group 3PSA<10 ng/mLPresent<pT3a<pT3b
ICC6Grade Group 5PSA>10 ng/mLAbsent<pT3b<pT3a
ICC7Grade Group 2PSA<10 ng/mLPresent<pT3b<pT3b

三、安装必要的库

在Python中,我们可以使用matplotlibpandas库来绘制华夫图。如果你还没有安装这些库,可以通过以下命令安装:

pip install matplotlib pandas

四、编写代码

1. 导入库

首先,我们需要导入必要的库。这些库将帮助我们处理数据和绘制图表。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

2. 创建数据

接下来,我们将数据整理成Python可以理解的格式。我们使用pandas库创建一个DataFrame,它是一个表格结构,方便我们操作数据。

# 创建患者和临床特征
patients = ['ICC1', 'ICC2', 'ICC3', 'ICC4', 'ICC5', 'ICC6', 'ICC7']
clinical_features = ['Grade Group', 'PSA', 'ICC', 'IDC', 'Stage']
# 创建数据
data = {'Grade Group': ['Grade Group 2', 'Grade Group 3', 'Grade Group 5', 'Grade Group 2', 'Grade Group 3', 'Grade Group 5', 'Grade Group 2'],'PSA': ['PSA<10 ng/mL', 'PSA>10 ng/mL', 'PSA<10 ng/mL', 'PSA>10 ng/mL', 'PSA<10 ng/mL', 'PSA>10 ng/mL', 'PSA<10 ng/mL'],'ICC': ['Present', 'Absent', 'Present', 'Absent', 'Present', 'Absent', 'Present'],'IDC': ['<pT3a', '<pT3a', '<pT3b', '<pT3b', '<pT3a', '<pT3b', '<pT3b'],'Stage': ['<pT3b', '<pT3a', '<pT3b', '<pT3a', '<pT3b', '<pT3a', '<pT3b']
}
# 转换数据为DataFrame
df = pd.DataFrame(data, index=patients)

3. 创建颜色映射

为了在华夫图中区分不同的类别,我们需要为每个类别分配一个颜色。我们使用一个字典来存储颜色映射。

colors = {'Grade Group 2': 'royalblue','Grade Group 3': 'orange','Grade Group 5': 'lightblue','PSA<10 ng/mL': 'lightgreen','PSA>10 ng/mL': 'yellow','Present': 'violet','Absent': 'pink','<pT3a': 'lightyellow','<pT3b': 'lightcyan'
}

4. 将数据转换为数值类型

matplotlib绘图时需要数值类型的输入,因此我们需要将数据中的类别转换为数值。我们使用pandasmap函数来实现这一点。

# 为每个类别分配一个唯一的数值
value_map = {value: i for i, value in enumerate(colors.keys())}
# 将数据转换为数值类型
df_numeric = df.apply(lambda x: x.map(value_map).fillna(-1).astype(int))

5. 绘制华夫图

现在,我们已经准备好绘制华夫图了。我们将使用matplotlibimshow函数来绘制图表,并添加标签和颜色条。

# 创建图表
plt.figure(figsize=(10, 8))
# 创建热图
plt.imshow(df_numeric, cmap='tab20', aspect='auto')
# 设置标签
plt.yticks(np.arange(len(patients)) + 0.5, patients, rotation=0)
plt.xticks(np.arange(len(clinical_features)) + 0.5, clinical_features, rotation=45)
plt.xlabel('Clinical Features')
plt.ylabel('Patients')
# 显示颜色条
cbar = plt.colorbar(ticks=range(len(value_map)))
cbar.set_ticklabels(list(value_map.keys()))
plt.tight_layout()
plt.show()

五、运行代码并查看结果

当你运行上述代码时,你会看到一个华夫图。每个小格子代表一个患者的某个临床特征,颜色表示不同的类别。通过这个图表,我们可以直观地看到每个患者在不同特征上的分类情况,如下图所示。

完整代码如下: 

六、总结

通过这个简单的例子,你已经学会了如何用Python制作华夫图。虽然代码看起来有点复杂,但只要按照步骤一步步来,你就能轻松掌握。希望这篇博客能帮助你更好地理解和使用Python进行数据可视化!

http://www.dtcms.com/a/269028.html

相关文章:

  • ShortGPT: Layers in Large Language Models are More Redundant Than You Expect
  • delphi,c++程序 阻止Win11 用户更改系统时间
  • 电子防抖(EIS)技术概述
  • Springboot 如何加密数据库连接相关配置信息
  • 特伦斯T1节拍器,突出综合优势与用户体验
  • AI建站工具对决:Wegic、腾讯云、Hocoos、Typedream深度测评,谁是国内用户的首选?
  • MySQL Galera Cluster企业级部署
  • 【Python】VSCode:解决模块导入与调试
  • 【音视频】HLS简介与服务器搭建
  • 【LLIE专题】通过预训练模型先验提升暗光增强模型复原效果
  • 安卓10.0系统修改定制化____如何修改固件 去除开机向导 实现开机直接进入桌面
  • C++笔记之开关控制的仿真与实际数据处理优雅设计
  • 基于物联网的城市低洼地段水深报警系统设计
  • 【人工智能学习路线(一)】以SCI为目标学习笔记——Python 编程基础入门
  • 面试总结46-50天
  • Python爬虫图片验证码和滑块验证码识别总结
  • 前端技术博客汇总文档
  • 思考5-10分钟,输出高质量的学术科研报告,谷歌的deepsearch模型太惊艳了!
  • 【最新版】Spring Boot 项目打包部署到服务器
  • 【配置+图解Android各种版本配置】
  • V8 主要版本与对应 ECMAScript 支持
  • 2025 API 开发管理工具 Apipost 与 Apifox 全维度对比
  • CentOS-7-x86_64解决:使用NAT模式无法ping通www.baidu.com或无法ping 8.8.8.8问题。
  • 防火墙防御DDoS攻击能力分析
  • AI 智能体记忆系统关键技术
  • vite打包的简单配置
  • 构建一个vue2的项目并安装echarts
  • 【机器学习笔记 Ⅲ】1 无监督学习
  • 讯飞结合kimi辅助文章博客写作
  • 如何解决微信小程序出现两个下拉刷新样式?