Python中kaplanmeier包Kaplan-Meier曲线绘图不显示问题求助
kaplanmeier包绘图异常:仅带
methodtype='custom'的调用能显示图形,单独调用km.plot无输出 问题描述
我在用kaplanmeier包绘制Kaplan-Meier曲线时遇到了异常:
- 运行官方示例代码时,只有保留最后一行带
methodtype='custom'参数的km.plot调用,4幅图才会全部显示;注释掉该行则完全看不到任何图形。 - 在我自己的代码中,单独调用
km.plot(results)无法显示绘图,但添加km.plot(results, methodtype='custom')后,会同时显示我的目标图和这个自定义参数的图。
查看源码发现,传入methodtype='custom'会调用_plotkm函数,但作为自学新手,搞不懂为什么会出现这种情况,求解决办法。
官方示例代码
# Import library import kaplanmeier as km # Example data df = km.example_data() time_event = df['time'] censoring = df['Died'] y = df['group'] results = km.fit(df['time'], df['Died'], df['group']) # Plot km.plot(results) km.plot(results, cmap='Set1', cii_lines=True, cii_alpha=0.05) km.plot(results, cmap=[(1, 0, 0),(0, 0, 1)]) km.plot(results, cmap='Set1', methodtype='custom')
我的代码
import pandas as pd import kaplanmeier as km df = pd.read_csv("*********mydatafile******") # 重命名列方便后续使用 df.rename(columns ={'Did patient have surgery at any time after diagnosis specifically for atypical mycobacterial infection?':'surgery'}, inplace = True) # 将Yes/No转换为1/2 df['surgery'].replace({'No': 1, 'Yes': 2}, inplace = True) time_event = df['Time to event'] censoring = df['Resolved'] y = df['surgery'] results = km.fit(time_event, censoring, y) km.plot(results)
问题原因分析
这个问题核心是绘图后端的显示逻辑差异:
- 默认的
km.plot调用依赖matplotlib的延迟渲染机制,没有主动触发图形显示; - 带
methodtype='custom'的调用,内部_plotkm函数显式执行了图形显示命令(比如plt.show()),强制触发了所有已绘制图形的渲染。
解决办法
方法1:手动触发图形显示
在所有km.plot调用后,手动添加matplotlib的显示命令,强制渲染所有图形:
import matplotlib.pyplot as plt # ... 你的原有代码 ... km.plot(results) plt.show() # 手动触发图形显示
不管是官方示例还是自定义代码,添加这一行后,不需要依赖methodtype='custom'的调用就能正常显示图形。
方法2:适配交互式环境(如Jupyter Notebook)
如果在Jupyter环境中运行,先添加绘图魔法命令确保自动渲染:
%matplotlib inline # 静态显示图形 # 或者用交互式显示:%matplotlib notebook # ... 你的原有代码 ... km.plot(results)
方法3:修复包默认逻辑(可选)
查看km.plot源码会发现,默认分支缺少plt.show()调用,而custom分支存在该命令。你可以给包提交issue建议修复默认行为,或者在自己的代码中封装一个补全显示逻辑的函数。
内容的提问来源于stack exchange,提问作者Cheyennerhap
相关产品推荐
相关产品推荐

