用Matplotlib在条形图上绘制Pandas数据框架的多列数据

  • Post category:Python

使用Matplotlib可以在条形图上绘制Pandas数据框架的多列数据。下面就来详细讲解。

首先,我们需要先导入相关的库和数据。以一个数据框架为例:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    'name': ['Tom', 'Mike', 'Lisa', 'Jack'],
    'score1': [80, 85, 70, 90],
    'score2': [70, 75, 65, 80],
    'score3': [90, 80, 75, 95]
})

数据框架包括四列:name列、score1列、score2列和score3列。其中,name列用于标识每个条形,score1score2score3三列数据用于在条形图上绘制多个条形,表示每个学生在三个科目上的成绩。

接下来,我们需要计算每个学生的总成绩,并按照总成绩由高到低对学生排序:

df['total'] = df['score1'] + df['score2'] + df['score3']   # 计算每个学生的总成绩
df = df.sort_values(by='total', ascending=False)   # 按照总成绩由高到低对学生排序

经过排序后,数据框架的顺序变成了JackMikeTomLisa

接下来,我们使用Matplotlib在条形图上绘制三个成绩数据。具体步骤如下:

# 设置图表的大小和字体大小
plt.figure(figsize=(8, 6), dpi=80)
plt.rcParams['font.size'] = 12

# 选择绘制的列
cols = ['score1', 'score2', 'score3']

# 绘制条形图
for i, col in enumerate(cols):
    plt.bar(df['name'], df[col], label=col, alpha=0.8-i*0.1)

# 添加标题、横纵坐标轴标题,并显示图例
plt.title("Student Scores")
plt.xlabel("Student")
plt.ylabel("Score")
plt.legend(loc='upper right')

# 显示图表
plt.show()

上述代码中,plt.figure函数用于设置图表的大小和分辨率,plt.rcParams['font.size']函数用于设置字体大小。cols选择我们要绘制的三列数据,enumerate函数可以迭代得到每个列的索引和列名。plt.bar函数用于绘制条形图,其中alpha参数控制颜色的透明度,可以设置不同参数实现多列数据的区分。最后,我们添加标题、横纵坐标轴标题并显示图例,使用plt.show函数显示图表。

通过上述步骤,我们就可以得到一张条形图,图中包含了每个学生在三个科目上的成绩,分别用不同颜色的条形区分。

总体思路是计算好总成绩,然后对总成绩进行排序,最后选择要绘制的列绘制条形图,并使用图例区分绘制的多个条形。