如何按升序排序条形图中的条形 (Matplotlib)?
在数据可视化中,条形图是一种常见的图表类型。然而,当我们需要按照某种顺序排列条形图时,Matplotlib并不提供直接的函数。但不用担心,可以通过制作一个新的数组来排序数据,再用Matplotlib绘制一个条形图。本文将为您介绍如何完成这个过程。
准备数据
首先,我们需要准备一组用于生成条形图的数据。为了说明如何排序条形图,我们选择以下数据:
import matplotlib.pyplot as plt
values = [50, 90, 70, 30]
names = ['A', 'B', 'C', 'D']
其中,values是每个条形的值,names是每个条形的名称。我们将在此基础上生成条形图。
制作新的数组
要对条形进行排序,我们需要创建一个新的数组,来存储数据在升序排列后的值。可以使用Python的zip函数将值和名称组合在一起,然后使用Python的sorted函数按值进行排序。最后,使用zip将排序后的值重新组合到名称中。
sorted_data = sorted(zip(values, names))
sorted_names = [name for value, name in sorted_data]
sorted_values = [value for value, name in sorted_data]
现在,我们有了排序后的名称和值的列表,可以使用它们创建一个排好序的条形图。
绘制条形图
现在我们可以使用Matplotlib制作一张排好序的条形图。首先,我们创建一个Figure对象和一个Axes对象。然后,使用Axes对象的barh函数绘制条形图,并使用新的数组来指定条形的值和名称。
fig, ax = plt.subplots()
ax.barh(sorted_names, sorted_values)
ax.invert_yaxis() # 反转y轴,使得第一个条形在顶部
plt.show()
这将生成一个排好序的条形图,其中条形按升序排序。
完整代码
import matplotlib.pyplot as plt
values = [50, 90, 70, 30]
names = ['A', 'B', 'C', 'D']
sorted_data = sorted(zip(values, names))
sorted_names = [name for value, name in sorted_data]
sorted_values = [value for value, name in sorted_data]
fig, ax = plt.subplots()
ax.barh(sorted_names, sorted_values)
ax.invert_yaxis() # 反转y轴,使得第一个条形在顶部
plt.show()
结论
在Matplotlib中,按升序排序条形图中的条形需要创建一个新的数组来存储排序后的数据。然后,使用Matplotlib的barh函数来生成条形图,使用新的数组来指定条形的值和名称。在实际应用中,可以根据需要使用Python的排序和组合函数来创建新的数组并生成所需的排序条形图。