python - 按 matplotlib 中的列表值对条形图进行排序
问题描述
我遇到了一个关于按价值对我的特征进行排序的问题。我希望看到我的图像,其条形图基于 y 轴上的高度而变短。不幸的是,我的条形图看起来像这样,功能按字母顺序排序:
现在我正在运行以下代码:
unsorted_list = [(importance, feature) for feature, importance in
zip(features, importances)]
sorted_list = sorted(unsorted_list)
features_sorted = []
importance_sorted = []
for i in sorted_list:
features_sorted += [i[1]]
importance_sorted += [i[0]]
plt.title("Feature importance", fontsize=15)
plt.xlabel("Importance", fontsize=13)
plt.barh(features_sorted,importance_sorted, color="green", edgecolor='green')
# plt.savefig('importance_barh.png', dpi=100)
这是通过那里的数据:
unsorted_list =
[('HR', 0.28804817462980353),
('BR', 0.04062328177704225),
('Posture', 0.09011618483921582),
('Activity', 0.0017821837085763366),
('PeakAccel', 0.002649111136700579),
('HRV', 0.13598729040097057),
('ROGState', 0.014534726412631642),
('ROGTime', 0.22986192060475388),
('VerticalMin', 0.016099772399198357),
('VerticalPeak', 0.012697214182994502),
('LateralMin', 0.029479112475744584),
('LateralPeak', 0.022745210003295983),
('SagittalMin', 0.08653071485979484),
('SagittalPeak', 0.028845102569277088)]
sorted_list =
[(0.0017821837085763366, 'Activity'),
(0.002649111136700579, 'PeakAccel'),
(0.012697214182994502, 'VerticalPeak'),
(0.014534726412631642, 'ROGState'),
(0.016099772399198357, 'VerticalMin'),
(0.022745210003295983, 'LateralPeak'),
(0.028845102569277088, 'SagittalPeak'),
(0.029479112475744584, 'LateralMin'),
(0.04062328177704225, 'BR'),
(0.08653071485979484, 'SagittalMin'),
(0.09011618483921582, 'Posture'),
(0.13598729040097057, 'HRV'),
(0.22986192060475388, 'ROGTime'),
(0.28804817462980353, 'HR')]
我最近升级到 matplotlib 3.0.2
提前感谢您帮助我!
解决方案
编辑(基于评论)
您的代码运行良好,matplotlib 2.2.2
问题似乎与您的列表命名约定以及它们之间的一些混淆。它将在 3.0.2 上按预期工作。不过,您可能有兴趣了解解决方法
features_sorted = []
importance_sorted = []
for i in sorted_list:
features_sorted += [i[1]]
importance_sorted += [i[0]]
plt.title("Feature importance", fontsize=15)
plt.xlabel("Importance", fontsize=13)
plt.barh(range(len(importance_sorted)), importance_sorted, color="green", edgecolor='green')
plt.yticks(range(len(importance_sorted)), features_sorted);
@tmdavison 建议的替代方案
plt.barh(range(len(importance_sorted)), importance_sorted, color="green",
edgecolor='green', tick_label=features_sorted)
推荐阅读
- python - 尽管安装了“fibo”包,但没有定义
- python - 在 code chef 上的 python 代码中出现 NZEC 错误
- java - GridBagLayout 中的锚定约束不起作用
- sql - 如果存在,如何组合 2 个选择语句?
- amazon-web-services - Azure DevOps S3 React/MERN 堆栈
- linux - Bash 脚本无法识别远程服务器上的根目录
- javascript - 我怎样才能确定它首先从“起点”函数调用开始,然后等到这个函数被解决后再开始下一个函数调用?
- reactjs - 更新 React 组件的多个实例的值返回 .map 不是函数
- java - 带有 MSCAPI 密钥库的 OpenPGP(充气城堡)
- python - 尝试制作一个简单的随机数生成器