📅  最后修改于: 2023-12-03 14:52:50.168000             🧑  作者: Mango
在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
的得分用红色表示。在每个条形下面有一个数字标签,表示得分。每个子图还包含一个标题、两个轴标签和一个图例。