📜  如何在python中并排绘制条形水平条形图(1)

📅  最后修改于: 2023-12-03 14:52:50.168000             🧑  作者: Mango

如何在Python中并排绘制条形水平条形图

在Python中,我们可以使用matplotlib库来绘制各种类型的图表,包括水平和垂直的条形图。本文将介绍如何在Python中绘制并排的水平条形图。

准备数据

首先,我们需要准备一些数据。假设我们有两个列表,分别保存了两个团队在不同阶段的得分情况。

team1_scores = [90, 80, 85, 95, 70]
team2_scores = [75, 60, 80, 82, 78]
绘制图表

接下来,我们需要使用matplotlib库来绘制并排的水平条形图。首先,导入必要的库:

import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体,防止出现乱码
plt.rcParams['font.sans-serif'] = ['SimHei']

接下来,我们创建一个新的图形,并定义两个子图,分别用于绘制两个团队的水平条形图。我们使用subplot函数来实现这个功能。

# 创建一个新的图形
fig = plt.figure(figsize=(8, 4))

# 定义第一个子图,用于绘制team1的水平条形图
ax1 = fig.add_subplot(121)

# 定义第二个子图,用于绘制team2的水平条形图
ax2 = fig.add_subplot(122)

现在,我们可以使用barh函数来绘制水平条形图。barh函数的第一个参数是一个数组,用于指定条形的高度(或长度)。第二个参数是一个数组,用于指定每个条形的标签。我们还可以指定其他参数,如颜色、边框颜色、边框宽度等。

# 绘制team1的水平条形图
index = np.arange(len(team1_scores))
bar_width = 0.35
opacity = 0.8
rects1 = ax1.barh(index, team1_scores, bar_width, alpha=opacity, color='b', label='Team 1')

# 绘制team2的水平条形图
index = np.arange(len(team2_scores))
rects2 = ax2.barh(index + bar_width, team2_scores, bar_width, alpha=opacity, color='r', label='Team 2')

# 设置图表标题和轴标签
ax1.set_title('Team 1 Scores')
ax1.set_xlabel('Score')
ax1.set_ylabel('Phase')

ax2.set_title('Team 2 Scores')
ax2.set_xlabel('Score')
ax2.set_ylabel('Phase')

# 将轴上的数字标签改为阶段名称
ax1.set_yticks(index)
ax1.set_yticklabels(('Phase 1', 'Phase 2', 'Phase 3', 'Phase 4', 'Phase 5'))
ax2.set_yticks(index)
ax2.set_yticklabels(('Phase 1', 'Phase 2', 'Phase 3', 'Phase 4', 'Phase 5'))

# 添加图例
ax1.legend()
ax2.legend()

# 显示图表
plt.show()
完整代码

下面是完整的代码:

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']

team1_scores = [90, 80, 85, 95, 70]
team2_scores = [75, 60, 80, 82, 78]

fig = plt.figure(figsize=(8, 4))

ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)

index = np.arange(len(team1_scores))
bar_width = 0.35
opacity = 0.8

rects1 = ax1.barh(index, team1_scores, bar_width, alpha=opacity, color='b', label='Team 1')
rects2 = ax2.barh(index + bar_width, team2_scores, bar_width, alpha=opacity, color='r', label='Team 2')

ax1.set_title('Team 1 Scores')
ax1.set_xlabel('Score')
ax1.set_ylabel('Phase')

ax2.set_title('Team 2 Scores')
ax2.set_xlabel('Score')
ax2.set_ylabel('Phase')

ax1.set_yticks(index)
ax1.set_yticklabels(('Phase 1', 'Phase 2', 'Phase 3', 'Phase 4', 'Phase 5'))
ax2.set_yticks(index)
ax2.set_yticklabels(('Phase 1', 'Phase 2', 'Phase 3', 'Phase 4', 'Phase 5'))

ax1.legend()
ax2.legend()

plt.show()

这个程序将绘制一个并排的水平条形图,类似于下面的样子:

我们可以看到,每个子图都包含五个条形,分别代表不同阶段的得分情况。Team 1的得分用蓝色表示,Team 2的得分用红色表示。在每个条形下面有一个数字标签,表示得分。每个子图还包含一个标题、两个轴标签和一个图例。