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

用点包图洞察医学数据:以血压分析为例

在医学数据分析的广袤天地里,可视化手段无疑是我们快速洞察数据、挖掘关键信息的有力 “武器”。今天,就来给各位医学同仁介绍一种别具一格的可视化图表 —— 点包图(Diverging Dotplot),顺便分享一段用 Python 实操绘制它的代码,助你轻松开启数据可视化的新旅程。

点包图为何物?

点包图,本质上是一种散点图的变体,它擅长突出数据点与某个参考值(常是均值)的偏离情况。在医学领域,很多时候我们关心某项生理指标相较于正常范围均值的高低,点包图就能将这类信息直观呈现,让人一眼看清数据的分布态势。

绘制前的准备:环境与数据

咱们使用 Python 里超热门的 pandas 和 matplotlib 库来绘制点包图。pandas 用于数据处理、规整,matplotlib 则负责可视化呈现。

先看看数据,以下这段代码模拟生成了一组简单却很典型的医学数据:

import pandas as pd
import matplotlib.pyplot as plt

# 模拟生成医学数据
data = {
    "systolic_bp": [175, 130, 160, 110, 150, 115, 135, 145, 115, 155],
    "diastolic_bp": [80, 85, 90, 75, 95, 83, 88, 93, 78, 98],
    "health_status": ["normal", "prehypertension", "hypertension stage 1", "normal", "hypertension stage 2",
                      "prehypertension", "hypertension stage 1", "hypertension stage 2", "normal",
                      "hypertension stage 3"]
}
df = pd.DataFrame(data)

这里的数据包含病人的收缩压(systolic_bp)、舒张压(diastolic_bp),还有对应的健康状态(health_status),麻雀虽小,五脏俱全,足够咱们开启分析之旅。

绘制点包图:步步为营

数据标准化:要绘制点包图,往往需先把关键数据标准化,让它们能围绕一个基准值(通常是均值,标准化后均值为 0)来分布展示。

# 提取'systolic_bp'列作为x变量,并计算其标准化值
x = df.loc[:, ['systolic_bp']]
df['systolic_bp_z'] = (x - x.mean()) / x.std()

这段代码提取了收缩压数据,算出每一个值相对均值的标准分数,正数意味着高于均值,负数反之。

颜色赋值:依据标准化后的数据点位置,给它们分配不同颜色,这能增强可视化的对比效果。

# 根据'systolic_bp_z'列的值确定颜色
df['colors'] = ['green' if x < 0 else'red' for x in df['systolic_bp_z']]

在这里,低于均值的点标为绿色,高于均值的点则是红色,一目了然区分血压高低情况。

数据排序与索引重置:排序能让点包图看起来更规整,重置索引则是为后续绘图的坐标定位打基础。

df.sort_values('systolic_bp_z', inplace=True)
df.reset_index(inplace=True)

绘图实操:终于到了出图环节。

# 绘制图形
plt.figure(figsize=(10, 5), dpi=200)
plt.scatter(df.systolic_bp_z, df.index, s=450, alpha=0.6, color=df.colors)

scatter 函数绘制散点,横坐标是标准化的收缩压,纵坐标用索引定位,点的大小、透明度、颜色都精心设置,确保视觉效果清晰又美观。

添加标注与美化:给每个点加上具体数值标注,再润色下图表边框、坐标轴标签、网格线等。

# 在每个点上添加'systolic_bp_z'的值作为标签
for x, y, tex in zip(df.systolic_bp_z, df.index, df.systolic_bp_z):
    t = plt.text(x, y, round(tex, 1),
                 horizontalalignment='center',
                 verticalalignment='center',
                 fontdict={'color': 'white'})

# 轻化边框
plt.gca().spines["top"].set_alpha(0.3)
plt.gca().spines["bottom"].set_alpha(0.3)
plt.gca().spines["right"].set_alpha(0.3)
plt.gca().spines["left"].set_alpha(0.3)

plt.yticks(df.index, df.health_status)
plt.title('Diverging Dotplot of Systolic Blood Pressure', fontdict={'size': 20})
plt.xlabel('Systolic Blood Pressure (Standardized)')
plt.grid(linestyle='--', alpha=0.5)
plt.xlim(-2.5, 2.5)
plt.show()

医学场景应用

点包图在医学数据分析里大有用武之地。拿血压数据来说,一眼扫过去,我们就能快速锁定哪些病人收缩压偏离正常均值较多,还能结合对应的健康状态,初步判断血压异常和疾病阶段之间的关联。要是拓展到大规模临床研究,分析诸如血糖、血脂等关键指标时,点包图同样能助力医生、研究者迅速梳理出不同亚组人群的指标差异,挖掘潜在的疾病风险因素,为精准医疗、个性化干预方案的制定提供可视化的数据支撑。

掌握点包图绘制,相当于在医学数据解读的 “武器库” 里新添一件趁手的工具,不妨在日常分析里小试身手,说不定能挖出意想不到的关键洞察!


http://www.kler.cn/a/463565.html

相关文章:

  • mysql连接时报错1130-Host ‘hostname‘ is not allowed to connect to this MySQL server
  • 【保姆级】sql注入之堆叠注入
  • 07-ArcGIS For JavaScript--隐藏参数qualitySettings(memory和lod控制)
  • Mac 安装 Flutter 提示 A network error occurred while checking
  • Linux终端输入删除键backspace显示^H,输入上下左右键显示^A^B^C^D原理以及详细解决办法!
  • ES IK分词器插件
  • 服务器网卡绑定mode和交换机的对应关系
  • MySQL 索引优化实战 – 结合 Explain 深度解析慢查询
  • REST与RPC的对比:从性能到扩展性的全面分析
  • 非关系型数据库和关系型数据库的区别
  • 免登录游客卡密发放系统PHP网站源码
  • Excel 面试 01 “Highlight in red the 10 lowest orders”
  • 如何查看下载到本地的大模型的具体大小?占了多少存储空间:Llama-3.1-8B下载到本地大概15GB
  • 系统架构风险、敏感点和权衡点的理解
  • MySQL数据库笔记——主从复制
  • Redis 实战篇 ——《黑马点评》(上)
  • 关于内网服务器依托可上网电脑实现访问互联网
  • MyBatis使用的设计模式
  • 【每日学点鸿蒙知识】输入法按压效果、web组件回弹、H5回退问题、Flex限制两行、密码输入自定义样式
  • GAMS安装和介绍、GAMS程序编写、GAMS程序调试、实际应用算例演示
  • Go语言学习路线
  • 硬件基础知识笔记(2)——二级管、三极管、MOS管
  • Lesson04 类与对象(3补充 友元、内部类)
  • Node 使用pkg打包部署
  • PyTorch中的autocast:混合精度训练的实现原理
  • Llama系列关键知识总结