Python实现KMeans聚类绘图调用plt.legend()报错如何解决
报错原因
No handles with labels found to put in legend 报错的核心原因是plt.legend()需要基于绘图元素的label属性生成图例,但你现有代码中所有plt.scatter()绘图语句都没有设置label参数,matplotlib找不到可用于生成图例的内容,因此抛出错误。你之前查到的ax.legend()是面向对象的绘图写法,不需要用也能解决当前问题。
修复方法
给每个散点图的plt.scatter()添加对应label参数即可,另外你注释的质心绘制代码存在笔误,km_clusters_centers_需要修改为km.cluster_centers_,可以选择取消注释展示聚类中心。
修正后的完整代码如下:
import numpy as np import pandas as pd from sklearn.cluster import KMeans from sklearn.preprocessing import MinMaxScaler import matplotlib.pyplot as plt import seaborn as sns df = pd.read_excel("Umur.xlsx") df.head() print(df) a = plt.scatter(df['Umur'],df['Gaji']) plt.show() km = KMeans(n_clusters=3) y_predicted = km.fit_predict(df[['Umur','Gaji']]) print(y_predicted) df['cluster'] = y_predicted print(df) df1 = df[df.cluster==0] df2 = df[df.cluster==1] df3 = df[df.cluster==2] # 给每个散点图加label参数 plt.scatter(df1.Umur,df1['Gaji'],color='green', label='聚类簇1') plt.scatter(df2.Umur,df2['Gaji'],color='red', label='聚类簇2') plt.scatter(df3.Umur,df3['Gaji'],color='black', label='聚类簇3') # 修复笔误后可取消注释展示质心 plt.scatter(km.cluster_centers_[:,0],km.cluster_centers_[:,1],color='purple',marker='*',label='聚类质心') plt.xlabel('Umur') plt.ylabel('Gaji') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者Wonderweis
相关产品推荐
相关产品推荐

