如何解决Birch聚类分析后使用PyPlot绘图触发TypeError错误的问题
问题修复方案
报错根因
你当前使用的dfAB1[row_ix, 0]是NumPy数组的索引语法,但dfAB1是Pandas DataFrame对象,不支持直接传入(行索引数组, 列序号)格式的元组作为索引键,因此触发类型错误。
同时你代码里的pyplot.show()放在了for循环内部,会导致每个聚类单独弹出一张散点图,无法把所有聚类绘制在同一张画布上。
修复代码
你可以选择以下两种方案中的任意一种修改:
方案1:使用DataFrame的iloc位置索引(推荐)
import numpy as np from matplotlib import pyplot # 为每个聚类绘制散点 for cluster in clusters: # 获取当前聚类对应的行索引,取where返回元组的第一个元素得到行索引数组 row_ix = np.where(yhat == cluster)[0] # 用iloc按位置取行、列数据 pyplot.scatter(dfAB1.iloc[row_ix, 0], dfAB1.iloc[row_ix, 1], label=f'聚类{cluster}') # 可按需添加图例 pyplot.legend() # 展示图片移到循环外,所有聚类会绘制在同一张图中 pyplot.show()
方案2:将DataFrame转为NumPy数组后按原语法索引
import numpy as np from matplotlib import pyplot # 提前转成numpy数组 dfAB1_arr = dfAB1.values # 为每个聚类绘制散点 for cluster in clusters: row_ix = np.where(yhat == cluster) pyplot.scatter(dfAB1_arr[row_ix, 0], dfAB1_arr[row_ix, 1], label=f'聚类{cluster}') pyplot.legend() pyplot.show()
内容的提问来源于stack exchange,提问作者ALPER AYTATLI
相关产品推荐
相关产品推荐

