Matplotlib 如何创建分组条形图

Matplotlib 如何创建分组条形图

在数据可视化中,条形图被广泛应用于显示变量之间的比较或分布情况。而分组条形图则更加灵活多样,能够同时展示多个变量和分组,呈现更丰富的信息。在本文中,将探讨使用Matplotlib创建分组条形图的方法,并提供一些实例说明。

阅读更多:Matplotlib 教程

Matplotlib基础

在开始创建分组条形图之前,我们需要先掌握Matplotlib的基础知识,并了解如何使用Python代码绘制简单的条形图。Matplotlib是一款Python的数据可视化工具包,常被用于创建各类图表,可通过pip命令进行安装。

下面是一个简单的条形图代码示例:

import matplotlib.pyplot as plt

x = ["A", "B", "C", "D", "E"]
y = [10, 8, 6, 4, 2]

plt.bar(x, y)
plt.show()

这段代码将创建一个由5个柱子构成的条形图,其中x轴对应柱子的标签,y轴对应柱子的高度。plt.bar()函数即为绘制条形图的关键函数。

分组条形图的创建

当有多个数据集需要展示时,我们就需要创建分组条形图。这里我们可以借助Matplotlib库中提供的一些函数:plt.subplots()和plt.bar()。

import matplotlib.pyplot as plt

# 数据集
men_means = [20, 35, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]
group_labels = ["Group 1", "Group 2", "Group 3", "Group 4", "Group 5"]

# 创建子图和2个条形图
fig, ax = plt.subplots()
rects1 = ax.bar(group_labels, men_means)
rects2 = ax.bar(group_labels, women_means, bottom=men_means)

# 添加注释、标题等信息
ax.legend((rects1[0], rects2[0]), ("Men", "Women"))
ax.set_xlabel("Groups")
ax.set_ylabel("Scores")
ax.set_title("Scores by group and gender")

# 展示图像
plt.show()

上面的代码将创建一个由5组柱子构成的分组条形图,其中每组由2个柱子组成,分别对应Men和Women在每组中的得分情况。bottom参数用于指定第二个条形图(women_means)相对于第一个条形图(men_means)的相对高度。

堆叠分组条形图的创建

除了常规的分组条形图,我们还可以创建堆叠分组条形图,用于更清晰地比较和展示不同数据集之间的关系。

import numpy as np
import matplotlib.pyplot as plt

# 数据集
group_labels = ["Group 1", "Group 2", "Group 3", "Group 4", "Group 5"]
men_means = [20, 35, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]
men_std = [2, 3, 4, 1, 2]
women_std = [3, 5, 2, 3, 3]

# 创建子图和2个条形图
fig, ax = plt.subplots()
bar_width = 0.35
r1 = np.arange(len(men_means))
r2 = [x + bar_width for x in r1]

rects1 = ax.bar(r1, men_means, bar_width, yerr=men_std, label='Men')
rects2 = ax.bar(r2, women_means, bar_width, yerr=women_std, label='Women')

# 添加注释、标题等信息
ax.set_ylabel('Scores')
ax.set_xlabel('Groups')
ax.set_title('Scores by group and gender')
ax.set_xticks([r + bar_width for r in range(len(men_means))], group_labels)
ax.legend()

# 堆叠两个条形图
ax.bar_label(rects1, padding=3)
ax.bar_label(rects2, padding=3)

# 展示图像
plt.show()

上述代码创建了一个5组柱子的堆叠分组条形图,Men和Women在每组中的得分高度叠加显示,并设置了标签、注释和标题等相关信息。值得注意的是,堆叠分组条形图需要在第二个条形图中指定bottom参数,使其相对于第一个条形图顶部对齐。

自定义颜色和图例

在绘制复杂的分组条形图时,很多时候我们需要自定义不同条形图的颜色和添加更规范的图例信息。下面的示例演示了如何实现这些功能。

import numpy as np
import matplotlib.pyplot as plt

# 数据集
group_labels = ["Group 1", "Group 2", "Group 3", "Group 4", "Group 5"]
men_means = [20, 35, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]
men_std = [2, 3, 4, 1, 2]
women_std = [3, 5, 2, 3, 3]

# 自定义颜色和图例
colors = ['b', 'r']
labels = ['Men', 'Women']
hatches = ['-', '+']

# 创建子图和2个条形图
fig, ax = plt.subplots()
bar_width = 0.35
r1 = np.arange(len(men_means))
r2 = [x + bar_width for x in r1]

rects1 = ax.bar(r1, men_means, bar_width, yerr=men_std, hatch=hatches[0], color=colors[0], label=labels[0])
rects2 = ax.bar(r2, women_means, bar_width, yerr=women_std, hatch=hatches[1], color=colors[1], label=labels[1])

# 添加注释、标题等信息
ax.set_ylabel('Scores')
ax.set_xlabel('Groups')
ax.set_title('Scores by group and gender')
ax.set_xticks([r + bar_width for r in range(len(men_means))], group_labels)
ax.legend()

# 堆叠两个条形图
ax.bar_label(rects1, padding=3)
ax.bar_label(rects2, padding=3)

# 展示图像
plt.show()

上面的代码创建了一个自定义颜色和图例的5组柱子的堆叠分组条形图,并对每个条形图添加了自己的标签和阴影。通过使用颜色列表、标签列表和阴影列表,创建我们期望的图例。值得注意的是,当条形图比较多时,阴影样式可能会有所重叠,需要根据具体情况进行调整。

总结

本文探讨了使用Matplotlib创建分组条形图的方法,并给出了常规分组条形图、堆叠分组条形图和自定义颜色图例的实例说明。这些技巧将有助于更好地展示和比较数据集中的多个变量和分组。希望本文的内容能够对你在数据可视化方面的学习和应用有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程