如何基于列表b的数值按降序绘制两个列表的柱状图?
解决柱状图按数值降序排列的问题
嘿,这个需求我之前做可视化时也碰到过!要让你的柱状图按照b列表的数值降序排列,核心是先把标签和对应的数值绑定在一起排序,避免排序后标签和数值错位。下面是具体的修改方法:
核心思路
先将两个列表的元素一一配对,然后以数值为依据进行降序排序,最后拆分出排序后的标签和数值再绘图。
修改后的完整代码
import matplotlib.pyplot as plt %matplotlib inline # 原始数据 a = ['Agriculture/Forestry/Fisheries/Veterinary Medicine', 'Architectural and Town Planning', 'Business Administration and Related', ...] b = [66667.0, 22283.0, 670091.5, ...] # 1. 把数值和标签配对,按数值降序排序 sorted_pairs = sorted(zip(b, a), reverse=True) # 2. 将排序后的配对拆分为新的数值列表和标签列表 sorted_b, sorted_a = zip(*sorted_pairs) # 3. 使用排序后的列表绘图 fig = plt.figure() ax = fig.add_subplot(111) ax.bar(sorted_a, sorted_b) plt.xticks(rotation=90) plt.show() # 加上这个可以确保图像正常显示
关键步骤解释
zip(b, a):把数值列表b和标签列表a的对应元素打包成元组(比如(66667.0, 'Agriculture/...')),这样排序时标签会跟着数值走,不会出现乱序的情况。sorted(..., reverse=True):Python的sorted函数默认按元组的第一个元素(也就是我们的数值)排序,reverse=True参数把默认的升序改成了降序。zip(*sorted_pairs):这一步是“解包”操作,把排序后的元组序列重新拆分成两个独立的列表,分别对应排序后的数值和标签,方便后续绘图使用。
这样修改后,你的柱状图就会按照数值从大到小的顺序排列啦!
内容的提问来源于stack exchange,提问作者Zito Relova
相关产品推荐
相关产品推荐

