📜  barh matplotlib 的更改顺序 - Python (1)

📅  最后修改于: 2023-12-03 15:13:36.399000             🧑  作者: Mango

barh matplotlib 的更改顺序 - Python

matplotlib 是 Python 的一个常用数据可视化库。其中的 barh 函数可以快速绘制水平方向的条形图,但默认情况下会按照数据的顺序从上到下绘制,这样可能会导致图形的易读性下降。本文介绍了如何更改 barh 函数的绘制顺序,以提高图形的可读性。

准备工作

在介绍具体方法之前,我们先准备一些数据,以便后面的演示。假设有四个城市 A、B、C、D,分别在 2020 年和 2021 年的销售额如下:

import numpy as np

np.random.seed(123)

cities = ["A", "B", "C", "D"]
sales_2020 = np.random.randint(100, 1000, size=4)
sales_2021 = np.random.randint(100, 1000, size=4)

接下来,我们使用 barh 函数绘制水平方向的条形图:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.barh(cities, sales_2020)
ax.barh(cities, -sales_2021)

plt.show()

这段代码将会生成一个完整但可读性较差的条形图,其中包含了 8 个条形。其中 4 个条形表示 2020 年的销售额,另外 4 个条形表示 2021 年的销售额,且它们被按照输入顺序从上到下绘制。

更改绘制顺序

我们可以按照数据的大小对条形排序,将数据较大的条形放在上方,以便图形更容易被读取。具体方法是通过 numpyargsort 函数返回排序后的下标,再以此为基础进行 barh 的绘制。

idx_2020 = sales_2020.argsort()
idx_2021 = sales_2021.argsort()

fig, ax = plt.subplots()

ax.barh(cities[idx_2020], sales_2020[idx_2020])
ax.barh(cities[idx_2021], -sales_2021[idx_2021])

plt.show()

在这个例子中,我们将 sales_2020sales_2021 分别排序,并使用 argsort 函数获取排序后的下标。然后,我们使用 idx_2020idx_2021 分别代表 2020 年和 2021 年的排序后的下标,并在 barh 函数中使用这些下标以按正确的顺序绘制条形。

这样,我们就成功地按照数据的大小对条形进行了排序,使得图形更容易被读取。

结论

matplotlibbarh 函数中,默认会按照输入的顺序绘制条形,但这种绘图方式可能会导致图形的易读性较差。通过使用 numpyargsort 函数,我们可以按照数据的大小对条形进行排序,以提高图形的可读性。