使用Python绘制MCA坐标图时遇AttributeError问题求助
解决MCA对象无plot_coordinates属性的报错
报错原因
你使用的prince库版本存在兼容性问题,旧版prince的MCA类未内置plot_coordinates方法,导致触发AttributeError。另外原代码中import pandas as pd被注释,运行时还会引发NameError,需先解开注释。
解决方案
方案1:升级prince到最新版本
执行以下命令升级库,新版prince的MCA类已支持plot_coordinates方法:
pip install --upgrade prince
升级后调整原代码的两处细节:
- 解开
import pandas as pd的注释 - 修正代码缩进(原代码中变量X的定义有多余缩进)
修正后的完整代码:
import pandas as pd import prince X = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/balloons/adult+stretch.data') X.columns = ['Color', 'Size', 'Action', 'Age', 'Inflated'] print(X.head()) mca = prince.MCA() mca = mca.fit(X) mca1 = mca.transform(X) print(mca1) ax = mca.plot_coordinates( X=X, ax=None, figsize=(6, 6), show_row_points=True, row_points_size=10, show_row_labels=False, show_column_points=True, column_points_size=30, show_column_labels=False, legend_n_cols=1 ) ax.get_figure().savefig('./mca_coordinates.svg')
方案2:手动提取坐标绘图(无需升级库)
如果不想升级prince,可从拟合后的MCA对象中提取行、列坐标,用matplotlib手动绘制:
import pandas as pd import prince import matplotlib.pyplot as plt X = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/balloons/adult+stretch.data') X.columns = ['Color', 'Size', 'Action', 'Age', 'Inflated'] mca = prince.MCA() mca.fit(X) # 提取行、列的MCA坐标 row_coords = mca.row_coordinates(X) col_coords = mca.column_coordinates(X) # 创建画布并绘图 fig, ax = plt.subplots(figsize=(6, 6)) ax.scatter(row_coords[0], row_coords[1], s=10, label='样本点') ax.scatter(col_coords[0], col_coords[1], s=30, label='变量类别点') # 设置图例与保存 ax.legend(ncol=1) plt.savefig('./mca_coordinates.svg') plt.show()
内容的提问来源于stack exchange,提问作者Emy
相关产品推荐
相关产品推荐

