📅  最后修改于: 2023-12-03 15:13:36.399000             🧑  作者: Mango
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 年的销售额,且它们被按照输入顺序从上到下绘制。
我们可以按照数据的大小对条形排序,将数据较大的条形放在上方,以便图形更容易被读取。具体方法是通过 numpy
的 argsort
函数返回排序后的下标,再以此为基础进行 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_2020
和 sales_2021
分别排序,并使用 argsort
函数获取排序后的下标。然后,我们使用 idx_2020
和 idx_2021
分别代表 2020 年和 2021 年的排序后的下标,并在 barh
函数中使用这些下标以按正确的顺序绘制条形。
这样,我们就成功地按照数据的大小对条形进行了排序,使得图形更容易被读取。
在 matplotlib
的 barh
函数中,默认会按照输入的顺序绘制条形,但这种绘图方式可能会导致图形的易读性较差。通过使用 numpy
的 argsort
函数,我们可以按照数据的大小对条形进行排序,以提高图形的可读性。