如何确定matplotlib条形图的条形顺序?
在使用matplotlib绘制条形图时,有时候需要调整条形的顺序,以便更好地表现数据。本文将介绍两种方法来确定matplotlib条形图的条形顺序。
方法一:使用pandas进行数据处理
假设有如下的数据集:
import pandas as pd
import matplotlib.pyplot as plt
data = {
'year': [2015, 2016, 2017, 2018],
'salesA': [100, 150, 200, 250],
'salesB': [200, 250, 150, 300],
'salesC': [300, 200, 100, 150]
}
df = pd.DataFrame(data)
首先,我们需要将数据集进行处理,按照我们所需要的条形顺序排列,然后再绘制条形图。
例如,我们希望先绘制’salesB’,然后是’salesA’,最后是’salesC’,可以使用如下代码:
# 按照指定的条形顺序排序
df = df[['salesB', 'salesA', 'salesC', 'year']]
# 绘制条形图
ax = df.plot(kind='bar', x='year', stacked=True)
plt.show()
方法二:使用matplotlib自带的排序函数进行处理
如果数据集比较大,手动进行排序可能会很麻烦。这时候,就可以使用matplotlib自带的排序函数进行处理。
假设有如下的数据集:
import numpy as np
data = np.array([[100, 200, 300], [150, 250, 200], [200, 150, 100], [250, 300, 150]])
我们可以使用以下代码对数据集排序,然后再绘制条形图:
# 按照行求和
sums = data.sum(axis=1)
# 对求和结果进行排序,并将索引返回
ordered_indexes = sums.argsort()
# 根据索引对原数组进行排序
data = data[ordered_indexes]
# 绘制条形图
fig, ax = plt.subplots()
ax.barh(np.arange(data.shape[0]), data[:, 0], align='center', label='salesA')
ax.barh(np.arange(data.shape[0]), data[:, 1], align='center', label='salesB', left=data[:, 0])
ax.barh(np.arange(data.shape[0]), data[:, 2], align='center', label='salesC', left=data[:, 0] + data[:, 1])
ax.set_yticks(np.arange(data.shape[0]))
ax.set_yticklabels(ordered_indexes)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Sales')
ax.set_title('Sales by Year')
ax.legend()
plt.show()
结论
本文介绍了两种方法来确定matplotlib条形图的条形顺序。使用pandas进行数据处理可以更加简便,适合数据集较小的情况;使用matplotlib自带的排序函数进行处理可以处理较大的数据集,但对初学者来说可能会比较困难。根据需要选择不同的方法即可。