运行lifelines生存分析代码遇AttributeError:_process_plot_var_args无get_next_color属性
解决lifelines绘图时的AttributeError: '_process_plot_var_args' object has no attribute 'get_next_color'问题
嘿,我之前碰到过类似的报错,这个问题大概率是Python 2.7环境下lifelines和matplotlib版本不兼容导致的——毕竟Python2.7早在2020年就停止维护了,lifelines的新版本基本都是针对Python3开发的,对旧版本Python的适配已经跟不上了。下面给你几个可行的解决方案:
1. 优先升级到Python 3.x版本(最推荐)
这是一劳永逸的办法,毕竟Python2.7已经被淘汰,后续会碰到更多库兼容问题:
- 先安装Python 3.8及以上的版本(官网下载即可)
- 建议创建一个新的虚拟环境,避免污染旧环境
- 执行命令安装最新版依赖:
pip install lifelines matplotlib - 记得把代码里的Python2语法改成Python3的:把
print data.sample(6)改成print(data.sample(6)),然后重新运行代码就能正常绘图了。
2. 在Python2.7下指定兼容的库版本
如果暂时没法升级Python,那就安装适配Python2.7的旧版本lifelines和matplotlib:
- 执行下面的命令安装指定版本:
pip install lifelines==0.23.0 matplotlib==2.2.5
这两个版本是经过验证可以在Python2.7下稳定运行lifelines绘图功能的。
3. 手动修改代码规避颜色获取逻辑
你也可以通过手动创建绘图轴对象、指定颜色的方式,绕过报错的颜色自动获取逻辑:
修改后的代码如下:
import pandas as pd from lifelines.datasets import load_dd import matplotlib.pyplot as plt data = load_dd() print(data.sample(6)) # Python3语法,Python2下可以改回print data.sample(6) from lifelines import KaplanMeierFitter kmf = KaplanMeierFitter() T = data["duration"] E = data["observed"] kmf.fit(T, event_observed=E) # 手动创建绘图轴并指定颜色 fig, ax = plt.subplots() kmf.survival_function_.plot(ax=ax) kmf.plot(ax=ax, color='darkorange') # 手动设置颜色,避免自动获取 plt.title('Survival function of political regimes') plt.show()
错误原因补充
这个报错本质是lifelines的set_kwargs_color函数尝试从绘图轴对象的_get_lines.get_next_color()方法获取自动颜色,但在你的环境中,轴对象被包装成了_process_plot_var_args类型,没有这个属性——这完全是版本不兼容导致的对象结构差异,解决版本问题或者手动指定颜色就能绕过这个问题。
内容的提问来源于stack exchange,提问作者Rabindra Nath Nandi
相关产品推荐
相关产品推荐

