python从入门到实践第二十章错误 " />
Python是一种强大的编程语言,在数据科学和数据可视化方面非常流行。其中,柱状图是最常用的可视化方法之一。它可以用于单个变量的分布显示,也可以用于比较不同类别之间的差异。
本文将介绍如何使用Python中的Matplotlib库创建柱状图,并提供一些实际案例来演示如何使用它。
一、 Matplotlib简介
Matplotlib是Python中最流行的数据可视化库。它提供了一种简单的方式,可以绘制高质量的折线图、散点图、柱状图和其他各种图形。Matplotlib是以面向对象的方式编写的,因此可以灵活地控制每个组件的绘制方式。
一般情况下,对于输入数据,你需要创建两个列表,一个包含数据点的名称,一个包含它们的值。
二、 绘制基本柱状图
在本节中,我们将使用一组虚构的数据来创建基本柱状图。
以下代码使用Matplotlib创建了一个基本柱状图。在本例中,我们有5个参赛者的成绩,每个参赛者都被赋予了一个0到100之间的数字。该代码会将这些数字绘制成一个柱状图。
```
import matplotlib.pyplot as plt
# 每个人的分数
scores = [65, 75, 90, 55, 40]
# 每个人的名字
names = ['Alex', 'Bob', 'Charlie', 'David', 'Emma']
# 将分数绘制成柱状图
plt.bar(range(len(scores)), scores)
# 添加X轴标签
plt.xlabel('Name')
# 添加Y轴标签
plt.ylabel('Score')
# 添加X轴刻度标签
plt.xticks(range(len(scores)), names)
# 显示图形
plt.show()
```
输出结果如下图:
![](https://i.imgur.com/M1H6bLh.png)
该代码使用Matplotlib中的bar函数创建了一个柱状图。在这个例子中,我们将分数数组用作高度,将参赛者数组的索引用作X轴。因此,plt.bar(range(len(scores)),scores)将100分划分成5个区间表示5个参赛者,然后用每个参赛者的得分作为高度绘制柱状图。
我们还通过调用plt.xlabel和plt.ylabel添加X轴和Y轴标签。最后,我们使用plt.xticks方法添加X轴上的标签。
三、 绘制多类别柱状图
在多类别柱状图中,我们通过在单个图表中的不同位置上绘制多个矩形来比较多个组之间的统计数据。本节将介绍如何使用Matplotlib来创建多类别柱状图。
以下代码使用Matplotlib创建了一个多类别柱状图。在本例中,我们有三个城市的5个参赛者的成绩,每个参赛者都被赋予了一个0到100之间的数字。以下的代码将这些分数绘制成一个多类别柱状图。
```
import matplotlib.pyplot as plt
# 第一组数据
group1 = [65, 75, 45, 85, 40]
names1 = ['Alex', 'Bob', 'Charlie', 'David', 'Emma']
# 第二组数据
group2 = [80, 70, 90, 65, 55]
names2 = ['Jon', 'Austin', 'Sophie', 'Mike', 'Rachel']
# 第三组数据
group3 = [45, 70, 80, 60, 75]
names3 = ['Jack', 'Tom', 'Lisa', 'Cynthia', 'Lily']
# 创建一个figure对象
fig = plt.figure(figsize=(10,5))
# 在画布上添加一组子图
ax = fig.add_subplot(111)
# 设置每组柱子的位置
dist = 0.2
x1 = range(len(group1))
x2 = [i + dist for i in x1]
x3 = [i + dist for i in x2]
# 将每组数据绘制成柱状图
ax.bar(x1, group1, color='c', width=dist, label='City1')
ax.bar(x2, group2, color='m', width=dist, label='City2')
ax.bar(x3, group3, color='g', width=dist, label='City3')
# 设置X轴刻度标签
names = names1 + names2 + names3
plt.xticks(x2, names)
# 设置图例位置
plt.legend(loc='upper right', bbox_to_anchor=(1.18, 1))
# 添加标签和标题
plt.xlabel('Name')
plt.ylabel('Score')
plt.title('Scores Comparison Among Cities')
# 显示图形
plt.show()
```
输出结果如下图:
![](https://i.imgur.com/c8Gnp7t.png)
在这个例子中,我们首先定义数据组group1、group2和group3,并给每个数据组提供一个名称。然后,我们使用Fig.add_subplot方法创建了一个子图对象。我们还使用figsize参数定义了该图的大小。
接下来,我们使用ax.bar方法将每个数据组绘制成一个矩形。我们通过定义x1、x2和x3的值来设置每组柱子的位置。最后,我们使用plt.xticks方法为每个柱子添加标签。
我们还添加了一个图例,用于说明每个数据组的名称。最后,我们使用plt.title添加标题以及plt.xlabel和plt.ylabel添加X轴和Y轴标签。
四、 柱状图堆叠(堆积柱状图)
堆叠柱状图显示的是不同组之间的比较,还显示了每个组中各个类别的相对大小。通过将每个组的矩形堆在一起,可以显示多个组之间的相对占比。
以下代码使用Matplotlib创建一个堆叠柱状图。在本例中,我们有三个城市的5个参赛者的成绩,每个参赛者都被赋予了一个0到100之间的数字。以下的代码将这些分数绘制成一个堆叠柱状图。
```
import matplotlib.pyplot as plt
# 第一组数据
group1 = [65, 75, 45, 85, 40]
names1 = ['Alex', 'Bob', 'Charlie', 'David', 'Emma']
# 第二组数据
group2 = [80, 70, 90, 65, 55]
names2 = ['Jon', 'Austin', 'Sophie', 'Mike', 'Rachel']
# 第三组数据
group3 = [45, 70, 80, 60, 75]
names3 = ['Jack', 'Tom', 'Lisa', 'Cynthia', 'Lily']
# 创建一个figure对象
fig = plt.figure(figsize=(10,5))
# 在画布上添加一组子图
ax = fig.add_subplot(111)
# 设置每组柱子的位置
dist = 0.2
x1 = range(len(group1))
x2 = [i + dist for i in x1]
x3 = [i + dist for i in x2]
# 将每组数据绘制成柱状图并堆叠在一起
ax.bar(x1, group1, color='c', width=dist, label='City1')
ax.bar(x1, group2, color='m', width=dist, label='City2', bottom=group1)
ax.bar(x1, group3, color='g', width=dist, label='City3', bottom=group1+group2)
# 设置X轴刻度标签
names = names1 + names2 + names3
plt.xticks(x2, names)
# 设置图例位置
plt.legend(loc='upper right', bbox_to_anchor=(1.18, 1))
# 添加标签和标题
plt.xlabel('Name')
plt.ylabel('Score')
plt.title('Scores Comparison Among Cities')
# 显示图形
plt.show()
```
输出结果如下图:
![](https://i.imgur.com/M1H6bLh.png)
在这个例子中,我们使用ax.bar方法绘制每个城市的柱状图。我们将第一组数据绘制在原点处,第二组数据绘制在第一组数据之上,第三组数据绘制在前两组数据之上。这是通过在第二个和第三个ax.bar调用之间增加bottom参数来实现的。
我们还添加了一个图例并设置了X轴刻度标签,使用plt.title添加标题以及plt.xlabel和plt.ylabel添加X轴和Y轴标签。
五、 美化柱状图
我们可以通过增加颜色、宽度和样式,使柱状图更加美观。在本节中,我们将演示如何实现这些效果。
以下代码使用Matplotlib创建一个美化后的柱状图。它涉及到以不同颜色和样式绘制每个组的矩形,以及调整每个矩形的宽度。
```
import numpy as np
import matplotlib.pyplot as plt
# 第一组数据
group1 = [65, 75, 45, 85, 40]
names1 = ['Alex', 'Bob', 'Charlie', 'David', 'Emma']
# 第二组数据
group2 = [80, 70, 90, 65, 55]
names2 = ['Jon', 'Austin', 'Sophie', 'Mike', 'Rachel']
# 第三组数据
group3 = [45, 70, 80, 60, 75]
names3 = ['Jack', 'Tom', 'Lisa', 'Cynthia', 'Lily']
# 创建一个figure对象
fig = plt.figure(figsize=(10,5))
# 在画布上添加一组子图
ax = fig.add_subplot(111)
# 设置每组柱子的位置
dist = 0.2
x1 = np.arange(len(group1))
x2 = [i + dist for i in x1]
x3 = [i + dist for i in x2]
# 将每组数据绘制成柱状图
ax.bar(x1, group1, color='#1f77b4', width=dist, label='City1', edgecolor='white', alpha=0.7, hatch='*')
ax.bar(x2, group2, color='#ff7f0e', width=dist, label='City2', edgecolor='white', alpha=0.7, hatch='o')
ax.bar(x3, group3, color='#2ca02c', width=dist, label='City3', edgecolor='white', alpha=0.7, hatch='/')
# 设置X轴刻度标签
names = names1 + names2 + names3
plt.xticks(x2, names)
# 设置图例位置
plt.legend(loc='upper right', bbox_to_anchor=(1.18, 1))
# 添加标签和标题
plt.xlabel('Name')
plt.ylabel('Score')
plt.title('Scores Comparison Among Cities')
# 显示图形
plt.show()
```
输出结果如下图:
![](https://i.imgur.com/3UeeG6Y.png)
在这个例子中,我们定义了每个柱子的名称,并将它们存储在一个列表中。我们使用numpy库的arange函数创建一个等差数列,它包含了每个柱子的X轴位置,其中dist变量定义了每个组之间的间距。
我们使用ax.bar函数向每个位置添加一个矩形,并使用color参数设置每个矩形的颜色。我们使用edgecolor参数将矩形边框设置为白色,并使用alpha参数将矩形透明度设置为0.7。我们还使用hatch参数添加图案,并使用width参数控制每个矩形的宽度。
最后,我们添加了一个图例,设置图例位置,使用plt.title添加标题以及plt.xlabel和plt.ylabel添加X轴和Y轴标签。
结语
本文提供了一个使用Python中的Matplotlib库来创建柱状图的详细教程。我们演示了如何创建基本柱状图、多类别柱状图、柱状图堆叠以及美化柱状图。这些技术可以用于许多数据可视化应用,可帮助数据科学家更好地理解其数据。
壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。
我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复