首页 > 其他分享 >脊线图:医学数据可视化的强大利器

脊线图:医学数据可视化的强大利器

时间:2024-11-10 16:46:51浏览次数:7  
标签:脊线 seaborn 血压 利器 可视化 kde vals

在医学数据分析中,可视化工具对于理解数据分布和趋势至关重要。脊线图(Ridgeline Plot)作为一种强大的可视化技术,在展示医学数据方面有着独特的优势。在这篇博客中,我们将深入探讨脊线图的应用场景以及如何使用 Python 的seaborn库绘制脊线图,为医学朋友们提供一种新的数据可视化思路。

一、脊线图的应用场景

1. 展示数据分布随变量变化

脊线图可以清晰地展示某个变量(如血压值)在不同类别(如不同年龄组)下的分布变化。在医学研究中,我们常常关心不同年龄、性别、疾病状态等因素对生理指标的影响。通过脊线图,我们可以直观地看到不同年龄组的血压分布情况,从而更好地理解年龄与血压之间的关系。

2. 比较多个组的数据分布

当我们需要比较多个组的数据分布时,脊线图可以提供一个简洁而有效的可视化方式。例如,我们可以比较不同性别、不同疾病状态下的血压分布,或者比较同一疾病在不同治疗阶段的生理指标变化。

3. 探索数据的趋势和模式

脊线图可以帮助我们发现数据中的趋势和模式。通过观察不同年龄组的血压分布曲线,我们可以判断血压是否随着年龄的增长而升高,或者是否存在特定年龄组的异常分布情况。

二、使用 Python 的seaborn库绘制脊线图

1. 准备数据

首先,我们需要准备要可视化的数据。在这个例子中,我们使用了一个包含不同年龄组血压数据的 CSV 文件。数据中包含了年龄组(Age Group)、血压类型(如收缩压或舒张压)和具体的血压值(Value)。

2. 代码实现

以下是使用 Python 的seaborn库绘制脊线图的完整代码:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from scipy.stats import gaussian_kde  # 从scipy.stats导入gaussian_kde,用于计算高斯核密度估计
import warnings

# 忽略特定类型的警告信息
warnings.filterwarnings("ignore", category=UserWarning, module="seaborn.axisgrid")

df = pd.read_csv('blood_pressure_data.csv')

# 创建脊线图
sns.set_theme(style="white", rc={"axes.facecolor": (0, 0, 0, 0)})
# 使用更丰富的调色板,颜色数量等于'Age Group'的唯一值数量
palette = sns.color_palette(n_colors=len(df['Age Group'].unique()), palette='viridis')
# 创建一个FacetGrid对象,用于绘制按'Age Group'分组的图表,设置行数为'Age Group'的唯一值数量,调整宽高比和高度
g = sns.FacetGrid(df, row='Age Group', aspect=10, height=0.8, palette=palette)

def plot_kde_with_ci(*args, **kwargs):
    data = kwargs.pop('data')  # 从关键字参数中弹出'data'
    x = data['Value']  # 从数据中获取'Value'列
    kde = gaussian_kde(x)  # 计算x的高斯核密度估计
    # 计算95%置信区间
    lower, upper = sns.utils.ci(x, 95)
    x_vals = np.linspace(x.min(), x.max(), 1000)  # 在x的最小值和最大值之间生成1000个等间距的点
    y_vals = kde(x_vals)  # 计算这些点的核密度估计值
    # 调整填充透明度和线宽,绘制置信区间内的填充区域
    plt.fill_between(x_vals, y_vals, where=(x_vals >= lower) & (x_vals <= upper), alpha=0.3, linewidth=0.5)
    # 在置信区间内绘制核密度估计曲线
    sns.kdeplot(data=data, x='Value', alpha=0.7, linewidth=1, **kwargs)

# 对每个子图应用plot_kde_with_ci函数
g.map_dataframe(plot_kde_with_ci)

# 在每个子图上绘制y=0的参考线
g.refline(y=0, linewidth=2, linestyle="-", color=None, clip_on=False)

# 在每个子图中添加纵坐标文本,表示对应的Age group信息
for i,ax in enumerate(g.axes.flat):
    age_group = ['0-9', '20-29', '30-39', '40-49', '50-59', '60-89']
    ax.text(18,0.01,age_group[i],
            fontweight='bold',fontsize=12,
            color=ax.lines[-1].get_color())
# 调整子图中文本之间的间距
g.fig.subplots_adjust(hspace=-0.3)

# 设置纵轴标签为空
g.set(yticks=[], ylabel='')
# 在图表底部中央设置横轴标签
plt.xlabel('Blood Pressure Value', fontsize=12)
# 设置x轴刻度标签的旋转角度为45度
plt.xticks(rotation=45)
# 移除子图标题,底部和左侧的边框线
g.set_titles("")
g.despine(bottom=True, left=True)

# 调整子图之间的间距
plt.subplots_adjust(bottom=0.2, top=0.85, hspace=0.4)

# 添加图表的主标题和子标题
plt.suptitle("Blood Pressure Distribution by Age Group", y=1, fontsize=16)  # 设置主标题,y参数控制标题的位置

plt.show()  # 显示图表

3. 代码解释

  • 首先,我们导入所需的库,包括numpyseabornmatplotlib.pyplotpandasscipy.stats中的gaussian_kde。同时,我们忽略了seaborn.axisgrid模块中的用户警告。
  • 读取包含血压数据的 CSV 文件,并设置绘图主题和背景颜色为透明。
  • 使用seaborncolor_palette函数创建一个调色板,颜色数量等于不同年龄组的数量。
  • 创建一个FacetGrid对象,用于绘制按年龄组分组的脊线图。我们设置了行数为年龄组的唯一值数量,调整了宽高比和子图的高度,并使用创建的调色板。
  • 定义一个函数plot_kde_with_ci,用于绘制核密度估计曲线和置信区间。在这个函数中,我们首先计算数据的高斯核密度估计,然后计算 95% 置信区间,并绘制核密度估计曲线和置信区间的填充区域。
  • 使用FacetGridmap_dataframe方法对每个子图应用plot_kde_with_ci函数。
  • 在每个子图上绘制 y=0 的参考线。
  • 通过循环遍历FacetGrid的子图,在每个子图中添加对应的年龄组信息作为纵坐标文本。
  • 设置纵轴标签为空,设置横轴标签为 “Blood Pressure Value”,并设置 x 轴刻度标签的旋转角度为 45 度。
  • 移除子图标题和底部、左侧的边框线。
  • 调整子图之间的间距,并添加主标题。
  • 最后,使用plt.show()显示图表。

三、总结

脊线图作为医学数据可视化的强大利器,能够帮助我们更好地理解不同年龄组的血压分布情况等医学数据。通过使用 Python 的seaborn库,我们可以轻松地绘制出漂亮的脊线图,并根据需要进行定制。希望这篇博客能够为医学朋友们在数据分析和可视化方面提供有益的参考。

标签:脊线,seaborn,血压,利器,可视化,kde,vals
From: https://blog.csdn.net/qq_38844835/article/details/143662297

相关文章

  • 计算机毕业设计Python+大模型动漫推荐系统 动漫视频推荐系统 机器学习 协同过滤推荐算
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业......
  • 计算机毕业设计Python+大模型农产品价格预测 ARIMA自回归模型 农产品可视化 农产品爬
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业......
  • 新手入门Java自动化测试的利器:Selenium WebDriver
    今天我们将深入探讨一款强大的Java自动化测试工具——SeleniumWebDriver。在正式介绍SeleniumWebDriver之前,让我们首先对Selenium本身进行简要概述,以便更好地理解其背景和功能。官方学习网站:https://www.selenium.dev/Selenium是一个开源的自动化测试框架,WebDriver是其核心......
  • # 爬虫应用 # 可视化窗口加爬虫 # 音频 # 批量 # tkinter #DrissionPage
    所用工具:pycham所需库:re,requests,tkinter,DrissionPage应用场景:DOUYING-PI-LIANG-HUA-CAI-JI  和 DAN-GE-CAI-JI在代码运行前确保库都导入完全和图片的下载;和图片路径正确;把下面图片下载,之后查看其路径,然后把源代码上的路径替换。img=tk.PhotoImage(file="D:\\01PY......
  • 医学可视化之涟漪图
    在医学领域,数据可视化能够帮助我们更直观地理解和分析复杂的信息。涟漪图作为一种独特的可视化工具,具有重要的作用、价值和广泛的使用场景。一、涟漪图的特点涟漪图是一种基于地理位置的可视化图表,它通过在地图上显示不同大小或颜色的圆形来代表特定数据的分布。每个圆形对应......
  • Python数据分析案例64——杭帮菜美食探索数据分析可视化
    案例背景杭州是真没啥美食呀.....但是总是还是有好吃的店家,于是就发挥专业长处,进行一下分析,看看杭帮菜的一些特点。。例如看看品种分布啊,类型分布啊,行政区的分布啊,店铺评分的一些分布啊,一些推荐菜的特点呀,平均消费价格呀等等。数据介绍本次数据来自美团爬虫所有杭州地区......
  • 基于python的河南天气数据分析与可视化(源码+文档+调试+可视化大屏)
    收藏关注不迷路!!......
  • # python # 可视化窗口 # 可应用与爬虫 # tkinter
    具有功能:创建窗口,监听窗口(可自定义打印图片-选项-按键)所需工具:pycham所需库:tkinter代码讲解:1.导入库-创建窗口-设置窗口大小-设置标题importtkinterastk#创建一个窗口root=tk.Tk()#设置窗口大小root.geometry("800x400+400+200")#注意这里使用的是英文字......
  • Trivy : 容器安全利器
    在当今数字化时代,容器化技术已经成为软件开发和部署的重要组成部分。然而,随着容器数量的增加,安全问题也日益突出。为了确保容器环境的安全,我们需要一款强大的工具来检测容器中的漏洞。今天,我将为大家介绍一款优秀的容器漏洞扫描工具:TrivyContainerScanner。本文将详细介绍如何使......
  • 最新毕设-SpringBoot-求职推荐系统-55000(免费领项目)可做计算机毕业设计JAVA、PHP、爬
    摘 要当前社会竞争激烈,求职市场信息众多,但信息不对称、筛选困难的问题依然存在。因此,设计开发一款求职推荐系统是顺应时代发展的必然选择。该求职推荐系统利用Java编程语言,使用springboot技术框架,采取MySQL数据库实现系统的各项功能,具有便捷高效、安全友好的特点,促进求职招聘......