使用UpSetPlot报错:'RangeIndex' object has no attribute 'levels'
UpSetPlot绘图失败的问题修正
你的代码存在三个关键问题,对应修正方案如下:
问题点与修正说明
- 错误调用绘图函数:你导入了
UpSet类但未实际使用,直接写plot(upset)会因未定义该函数报错。需使用UpSet类实例化后调用plot(),或从upsetplot导入plot函数。 - matplotlib引用错误:你导入的是
plt别名,但最后调用pyplot.show(),应改为plt.show()。 - 数据格式未适配:CSV读取的布尔值会变成字符串类型(
"FALSE"/"TRUE"),需转为Python原生bool类型;同时要让UpSetPlot识别分类列与计数列的对应关系。
修正后的完整代码
方式一:使用UpSet类(推荐)
import pandas as pd from matplotlib import pyplot as plt from upsetplot import UpSet # 读取数据 upset_df = pd.read_csv("upset.csv") # 将字符串格式的布尔值转为原生bool类型 upset_df[['cat0', 'cat1', 'cat2']] = upset_df[['cat0', 'cat1', 'cat2']].astype(bool) # 将分类列设置为索引,让UpSet识别集合分组 upset_df = upset_df.set_index(['cat0', 'cat1', 'cat2']) # 初始化UpSet并绘制图表 UpSet(upset_df).plot() # 显示图表 plt.show()
方式二:直接使用plot函数
import pandas as pd from matplotlib import pyplot as plt from upsetplot import plot upset_df = pd.read_csv("upset.csv") upset_df[['cat0', 'cat1', 'cat2']] = upset_df[['cat0', 'cat1', 'cat2']].astype(bool) # 显式指定计数列为value plot(upset_df, value='value') plt.show()
运行上述代码后,就能正确生成UpSet图表了。
内容的提问来源于stack exchange,提问作者afroduck
相关产品推荐
相关产品推荐

