如何将numpy数组降序排序后匹配对应标签绘制Matplotlib降序柱状图
解决方法
你遇到的问题本质是单独对重要性数值排序时,丢失了特征名和数值的对应关系,只需要通过排序索引同步映射两个序列即可解决,完整可运行代码如下:
import numpy as np import matplotlib.pyplot as plt flist = ['int_rate', 'installment', 'log_annual_inc','dti', 'fico', 'days_with_cr_line', 'revol_bal', 'revol_util', 'inq_last_6mths','pub_rec'] fimportance = np.array([250.14120228,23.95686725,10.71979245,13.38566487,219.41737141, 8.19261323,27.69341779,64.96469182,218.77495366,22.7037686 ]) # 获取重要性降序排序对应的原始索引 sorted_idx = np.argsort(fimportance)[::-1] # 按索引同步提取排序后的特征名和重要性数值 sorted_flist = [flist[i] for i in sorted_idx] sorted_fimp = fimportance[sorted_idx] # 绘制横向柱状图 plt.barh(sorted_flist, sorted_fimp) # 反转y轴,让重要性最高的int_rate显示在最顶部 plt.gca().invert_yaxis() # 补充图表标注 plt.xlabel('特征重要性') plt.ylabel('特征名称') plt.title('特征重要性降序分布') plt.tight_layout() plt.show()
关键逻辑说明
np.argsort(fimportance)会返回数组升序排序后的原始索引位置,加[::-1]反转后得到降序排序对应的索引序列- 用该索引序列同时提取特征名和重要性数值,保证两者的对应关系和原始数据完全一致
- 调用
plt.gca().invert_yaxis()反转y轴,符合常规阅读习惯:图表越靠上的特征重要性越高
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

