今天我们将一起学习如何利用Python中____lifelines包_____建模和分析生存数据并用plot_绘制生存曲线,以及更改其样式如标题字号大小,坐标轴及图例设置等,使用Python即可绘制出SCI论文图!___”
lifelines包
lifelines 是一个 Python 生存分析库,用于建模和分析生存数据。它提供了许多用于生存分析的工具,包括 Kaplan-Meier 生存曲线、Cox 比例风险模型、Aalen 加法风险模型等。下面是一些 lifelines 中常用的功能和概念的详解:
Kaplan-Meier 生存曲线:
Kaplan-Meier 生存曲线是一种用于估计生存概率的非参数方法。它可用于分析生存数据,例如患者的存活时间。KaplanMeierFitter 类用于拟合 Kaplan-Meier 生存曲线。可以使用 fit 方法拟合数据,然后使用 plot 方法绘制生存曲线图。
Cox 比例风险模型:
Cox 比例风险模型是一种用于分析生存数据的半参数方法。它可以用来研究不同因素对生存时间的影响。CoxPHFitter 类用于拟合 Cox 比例风险模型。可以使用 fit 方法拟合模型,然后进行参数估计和假设检验。
Aalen 加法风险模型:
Aalen 加法风险模型是一种用于考虑时间依赖性的生存分析方法。它适用于具有时间相关危险率的数据。AalenAdditiveFitter 类用于拟合 Aalen 加法风险模型。可以使用 fit 方法拟合模型,然后进行参数估计和假设检验。
生存数据格式:lifelines 通常使用 Pandas 数据框(DataFrame)来表示生存数据。数据框包括观察时间(时间至事件发生或截尾)和事件状态(1 表示事件发生,0 表示事件未发生)。
生存曲线绘制:
使用 plot 方法可以绘制 Kaplan-Meier 生存曲线。您可以自定义图表的颜色、标签、置信区间等参数。
生存分析统计量:
lifelines 提供了一系列生存分析统计量,如中位生存时间、生存概率、累积危险函数等,用于描述生存数据的特征。
lifelines 提供了强大的工具来处理和分析生存数据,使研究人员能够更好地理解和解释生存时间数据中的模式和趋势。可以根据具体的研究问题选择合适的方法和模型来进行生存分析。
接下来我们简单演示一下:
import pandas as pd``from lifelines import KaplanMeierFitter``import matplotlib.pyplot as plt`` ``# 示例数据,包括观察时间和事件状态(1表示事件发生,0表示事件未发生)``data_group1 = pd.DataFrame({` `'time': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],` `'event': [1, 1, 0, 1, 0, 1, 1, 0, 1, 0]``})`` `` ``# 创建 Kaplan-Meier 生存曲线对象``kmf = KaplanMeierFitter()`` ``# 拟合第一组数据并绘制曲线(使用红色线条)``kmf.fit(data_group1['time'], event_observed=data_group1['event'])``kmf.plot(label='Group 1', color='red')`` ``# 添加图例``plt.legend()`` ``# 添加图表标题和标签``plt.title('Kaplan-Meier Survival Curve')``plt.xlabel('Time')``plt.ylabel('Survival Probability')`` ``# 显示图表``plt.show()``
输出:
我们使用KM函数拟合生存曲线并绘制,首先我们创建一组生存数据(DataFrame格式),并用KM函数进行拟合,plot进行绘图,绘制出的曲线即为生存曲线,阴影部分代表95%置信区间。
plot绘图参数设置
我们可以与seaborn结合绘制更美观的曲线图,并可以利用plt.annotate()函数为其添加注释:
import pandas as pd``import matplotlib.pyplot as plt``import seaborn as sns``from lifelines import KaplanMeierFitter`` ``# 示例数据``data = pd.DataFrame({` `'time': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],` `'event': [1, 1, 0, 1, 0, 1, 1, 0, 1, 0]``})`` ``# 创建 Kaplan-Meier 生存曲线对象``kmf = KaplanMeierFitter()`` ``# 拟合生存曲线``kmf.fit(data['time'], event_observed=data['event'], label='Overall Survival')`` ``# 创建图表``fig, ax = plt.subplots(figsize=(10, 6))``sns.set_style("white")`` ``# 绘制生存曲线``kmf.plot(ci_show=False, color='blue', lw=2, label='Overall Survival', ax=ax)`` ``# 添加标签和标题``plt.title('Kaplan-Meier Survival Curve')``plt.xlabel('Time (Months)')``plt.ylabel('Survival Probability')`` ``# 添加自定义文本注释``plt.annotate('Median Survival: 35 months', xy=(35, 0.5), xytext=(40, 0.65),` `arrowprops=dict(facecolor='black', shrink=0.05),` `fontsize=12, color='black')`` ``# 自定义 x 轴刻度``plt.xticks(np.arange(0, 40, 5))`` ``# 添加图例``plt.legend()`` ``# 去掉上边框和右边框线``ax.spines['top'].set_visible(False)``ax.spines['right'].set_visible(False)`` ``# 显示图表``plt.show()
输出:
在这里我们使用seaborn中的图像样式进行绘制,可以更改图表的背景和轴线的外观。seaborn 提供了以下几种主要的样式:
“whitegrid”:白色背景,带有网格线。
“darkgrid”:深色背景,带有网格线。
“white”:白色背景,无网格线。
“dark”:深色背景,无网格线。
“ticks”:白色背景,带有刻度线但无网格线。
“poster”:适用于大尺寸图表,字号较大的样式。
“notebook”:默认样式,适用于 Jupyter Notebook 等交互式环境。
我们在plot函数中通过设置ci_show=False去掉了置信区间,color参数设置曲线的颜色,lw参数设置曲线的线宽,label设置曲线的标签,下面我们详细介绍一下plot函数中各参数的意义:
KaplanMeierFitter.plot(ax=None, ci_alpha=0.95, show_censors=False, censor_styles=None, ci_force_lines=False, ci_show=True, title=None, xlabel=None, ylabel=None, **kwargs)
ax:可选参数,指定要绘制生存曲线的 Matplotlib Axes 对象。如果未提供此参数,将创建一个新的图表。
ci_alpha:可选参数,表示置信区间的置信水平。默认为 0.95,表示计算 95% 置信区间。
show_censors:可选参数,表示是否显示截尾标记。如果为 True,则显示截尾标记(默认为 False)。
censor_styles:可选参数,用于自定义截尾标记的样式。可以提供一个字典,指定不同样式的标记。
ci_force_lines:可选参数,表示是否强制绘制置信区间的线条。默认为 False,表示绘制阶梯状的置信区间区域。
ci_show:可选参数,表示是否显示置信区间。默认为 True,表示显示置信区间区域或线条。
title:可选参数,用于设置图表的标题。
xlabel:可选参数,用于设置 x 轴的标签。
ylabel:可选参数,用于设置 y 轴的标签。
**kwargs:其他可选参数,用于传递给 Matplotlib 的绘图函数。
添加刻度线及更改字号
上述图像还有一些小缺点就是各个标题字号太小,而且没有刻度线,下面我们来改善一下:
import pandas as pd``import matplotlib.pyplot as plt``import seaborn as sns``from lifelines import KaplanMeierFitter`` ``# 示例数据``data = pd.DataFrame({` `'time': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],` `'event': [1, 1, 0, 1, 0, 1, 1, 0, 1, 0]``})`` ``# 创建 Kaplan-Meier 生存曲线对象``kmf = KaplanMeierFitter()`` ``# 拟合生存曲线``kmf.fit(data['time'], event_observed=data['event'], label='Overall Survival')`` ``# 创建图表``fig, ax = plt.subplots(figsize=(10, 6))``sns.set_style("white")`` ``# 绘制生存曲线``kmf.plot(ci_show=False, color='blue', lw=2, label='Overall Survival', ax=ax)`` ``# 添加标签和标题``plt.title('Kaplan-Meier Survival Curve', fontsize=18)``plt.xlabel('Time (Months)', fontsize=15)``plt.ylabel('Survival Probability', fontsize=15)`` ``# 添加自定义文本注释``plt.annotate('Median Survival: 35 months', xy=(35, 0.5), xytext=(40, 0.65),` `arrowprops=dict(facecolor='black', shrink=0.05),` `fontsize=14, color='black')`` ``# 自定义 x 轴刻度``plt.xticks(np.arange(0, 55, 5),fontsize=12)``plt.yticks(fontsize=12) # 调整 y 轴刻度的字号`` ``# 添加图例``plt.legend(fontsize=14)`` ``# 去掉上边框和右边框线``ax.spines['top'].set_visible(False)``ax.spines['right'].set_visible(False)`` ``# 设置刻度线``ax.tick_params(axis='both', which='both', bottom=True, left=True)`` ``# 显示图表``plt.show()
输出:
我们通过设置ax.tick_params函数设置刻度线,fontsize调整字号大小,这样看起来顺眼多了,我们还可以绘制两组生存曲线:
import pandas as pd``import matplotlib.pyplot as plt``import seaborn as sns``from lifelines import KaplanMeierFitter`` ``# 示例数据``data = pd.DataFrame({` `'time': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],` `'event': [1, 1, 0, 1, 1, 1, 1, 0, 1, 0]``})``data2 = pd.DataFrame({` `'time': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],` `'event': [0, 1, 0, 0, 1, 0, 1, 0, 0, 0]``})``# 创建 Kaplan-Meier 生存曲线对象``kmf = KaplanMeierFitter()`` ``# 拟合生存曲线``kmf.fit(data['time'], event_observed=data['event'], label='Overall Survival')`` ``# 创建图表``fig, ax = plt.subplots(figsize=(10, 6))``sns.set_style("white")`` ``# 绘制生存曲线``kmf.plot(ci_show=False, color='blue', lw=2, label='Group 1', ax=ax)`` ``# 拟合第二组数据并绘制曲线(使用蓝色线条)并去掉置信区间``kmf.fit(data2['time'], event_observed=data2['event'])``kmf.plot(label='Group 2', color='red', ci_show=False, ax=ax,lw=2)`` ``# 添加标签和标题``plt.title('Kaplan-Meier Survival Curve', fontsize=18)``plt.xlabel('Time (Months)', fontsize=15)``plt.ylabel('Survival Probability', fontsize=15)`` `` ``# 自定义 x 轴刻度``plt.xticks(np.arange(0, 55, 5),fontsize=12)``plt.yticks(fontsize=12) # 调整 y 轴刻度的字号`` ``# 添加图例``plt.legend(fontsize=14)`` ``# 去掉上边框和右边框线``ax.spines['top'].set_visible(False)``ax.spines['right'].set_visible(False)`` ``# 设置刻度线``ax.tick_params(axis='both', which='both', bottom=True, left=True)`` ``# 显示图表``plt.show()
输出:
还可以通过设置plt.legend中的参数调整图例样式:
import pandas as pd``import matplotlib.pyplot as plt``import seaborn as sns``from lifelines import KaplanMeierFitter`` `` ``# 示例数据``data = pd.DataFrame({` `'time': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],` `'event': [1, 1, 0, 1, 1, 1, 1, 0, 1, 0]``})``data2 = pd.DataFrame({` `'time': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],` `'event': [0, 1, 0, 0, 1, 0, 1, 0, 0, 0]``})``# 创建 Kaplan-Meier 生存曲线对象``kmf = KaplanMeierFitter()`` ``# 拟合生存曲线``kmf.fit(data['time'], event_observed=data['event'], label='Overall Survival')`` ``# 创建图表``fig, ax = plt.subplots(figsize=(10, 6))``sns.set_style("white")`` ``# 绘制生存曲线``kmf.plot(ci_show=False, color='blue', lw=2, label='Group 1', ax=ax)``# 拟合第二组数据并绘制曲线(使用蓝色线条)并去掉置信区间``kmf.fit(data2['time'], event_observed=data2['event'])``kmf.plot(label='Group 2', color='red', ci_show=False, ax=ax,lw=2)`` ``# 添加标签和标题``plt.title('Kaplan-Meier Survival Curve', fontsize=18)``plt.xlabel('Time (Months)', fontsize=15)``plt.ylabel('Survival Probability', fontsize=15)`` ``# 自定义 x 轴刻度``plt.xticks(np.arange(0, 55, 5),fontsize=12)``plt.yticks(fontsize=12) # 调整 y 轴刻度的字号``# 添加图例``plt.legend(fontsize=14, frameon=False)`` ``# 去掉上边框和右边框线``ax.spines['top'].set_visible(False)``ax.spines['right'].set_visible(False)`` ``# 设置刻度线``ax.tick_params(axis='both', which='both', bottom=True, left=True)``# 显示图表``plt.show()
输出:
这里我们通过设置frameon=False,取消了图例的边框。其内包含其他参数如下:
labels:一个包含图例标签的列表,用于指定每个图例项的标签文本。
loc:用于指定图例的位置。常见的取值包括 ‘best’(自动选择最佳位置)、‘upper right’(右上角)、‘upper left’(左上角)、‘lower right’(右下角)、‘lower left’(左下角)等。您也可以使用数字表示位置,例如,0 表示 ‘best’,1 表示 ‘upper right’,以此类推。
fontsize:用于设置图例文本的字号大小。
title:用于设置图例的标题文本。
title_fontsize:用于设置图例标题的字号大小。
frameon:一个布尔值,用于控制是否显示图例的边框。设置为 False 可以去掉边框,设置为 True 则显示边框。
facecolor:用于设置图例的背景颜色。
edgecolor:用于设置图例的边框颜色。
framealpha:用于设置图例边框的透明度。
ncol:用于设置图例的列数,以便在一行中显示多个图例项。
bbox_to_anchor:用于设置图例的位置,可以指定图例的左下角坐标相对于 Axes 坐标系的位置。
bbox_transform:指定 bbox_to_anchor 参数的参考坐标系,通常使用 ‘axes’(Axes 坐标系)或 ‘figure’(Figure 坐标系)。
ax.legend 函数用于设置图例的属性,包括标签、位置、字号、颜色等。我们可以根据自己的需求进行绘制。
总结
以上就是本次推送的全部内容,希望小伙伴们能够多提提建议!
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
CSDN大礼包:全网最全《Python学习资料》免费赠送!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
CSDN大礼包:全网最全《Python学习资料》免费赠送!(安全链接,放心点击)
若有侵权,请联系删除