如何确定matplotlib条形图的条形顺序?

如何确定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自带的排序函数进行处理可以处理较大的数据集,但对初学者来说可能会比较困难。根据需要选择不同的方法即可。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程