Matplotlib 柱状图

Matplotlib 柱状图

参考:bar graph matplotlib

MatplotlibPython 中用于绘制图表和数据可视化的库,它提供了丰富的功能和灵活的接口,可以创建各种不同类型的图表,包括折线图、散点图、饼图和柱状图等。在本文中,我们将重点介绍如何使用 Matplotlib 创建柱状图,并通过示例代码详细展示如何定制和美化这些图表。

1. 基本柱状图

首先,让我们从最基本的柱状图开始。下面的示例代码展示了如何使用 Matplotlib 创建一个简单的柱状图,并为柱子添加标签:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values = [5, 10, 15, 20, 25]

# 创建柱状图
plt.bar(labels, values)

# 添加标题和标签
plt.title('Basic Bar Graph')
plt.xlabel('Categories')
plt.ylabel('Values')

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

运行上述代码后,将会显示一个带有五个柱子的柱状图,每个柱子代表一个类别,高度表示该类别的数值。接下来,我们将介绍如何通过定制和美化来改进这个图表。

2. 柱状图样式定制

2.1 修改柱子颜色

通过修改柱子的颜色,我们可以让柱状图看起来更加吸引人。下面的示例代码展示了如何将柱子的颜色设定为指定的颜色:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values = [5, 10, 15, 20, 25]

# 创建柱状图
plt.bar(labels, values, color='skyblue')

# 添加标题和标签
plt.title('Customized Bar Graph')
plt.xlabel('Categories')
plt.ylabel('Values')

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们将柱子的颜色设定为了天蓝色(skyblue),运行代码后即可在图表中看到柱子颜色发生了变化。

2.2 修改柱子宽度

我们还可以通过修改柱子的宽度来改变柱状图的外观,下面的示例代码展示了如何将柱子的宽度设定为指定的值:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values = [5, 10, 15, 20, 25]

# 创建柱状图
plt.bar(labels, values, width=0.6)

# 添加标题和标签
plt.title('Customized Bar Graph')
plt.xlabel('Categories')
plt.ylabel('Values')

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们将柱子的宽度设定为了0.6,运行代码后即可看到柱子变得更加粗壮。

3. 堆叠柱状图

堆叠柱状图可以很好地展示多组数据的比较情况,下面的示例代码展示了如何创建一个堆叠柱状图:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values1 = [5, 10, 15, 20, 25]
values2 = [3, 7, 12, 17, 22]

# 创建堆叠柱状图
plt.bar(labels, values1, label='Values 1')
plt.bar(labels, values2, bottom=values1, label='Values 2')

# 添加标题和标签
plt.title('Stacked Bar Graph')
plt.xlabel('Categories')
plt.ylabel('Values')

# 添加图例
plt.legend()

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们创建了一个堆叠柱状图,其中每个类别有两个柱子,分别表示两组数据。通过bottom参数,我们可以指定第二组柱子的起始位置,使其在第一组柱子的顶部。

4. 分组柱状图

分组柱状图可以很好地展示不同类别内部的分组比较情况,下面的示例代码展示了如何创建一个分组柱状图:

import matplotlib.pyplot as plt
import numpy as np

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values1 = [5, 10, 15, 20, 25]
values2 = [3, 7, 12, 17, 22]

x = np.arange(len(labels))
width = 0.35

# 创建分组柱状图
plt.bar(x - width/2, values1, width, label='Values 1')
plt.bar(x + width/2, values2, width, label='Values 2')

# 添加标题和标签
plt.title('Grouped Bar Graph')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.xticks(x, labels)

# 添加图例
plt.legend()

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们使用 NumPy 生成了类别的位置信息,并通过调整width参数来控制柱子的宽度,从而创建了一个分组柱状图。

5. 柱状图与折线图组合

有时候,我们可能需要在柱状图上叠加一条折线图,以展示某种趋势或关系。下面的示例代码展示了如何创建一个柱状图与折线图组合的图表:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values = [5, 10, 15, 20, 25]
line_values = [3, 6, 9, 12, 15]

# 创建柱状图
plt.bar(labels, values, label='Values')

# 创建折线图
plt.plot(labels, line_values, color='red', marker='o', label='Line Values')

# 添加标题和标签
plt.title('Bar and Line Graph')
plt.xlabel('Categories')
plt.ylabel('Values')

# 添加图例
plt.legend()

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们将折线图的数据叠加到了柱状图上,并通过设置color='red'marker='o'等参数为折线图添加了样式。

6. 水平柱状图

除了垂直方向的柱状图外,Matplotlib 也支持绘制水平方向的柱状图,下面的示例代码展示了如何创建一个水平柱状图:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values = [5, 10, 15, 20, 25]

# 创建水平柱状图
plt.barh(labels, values)

# 添加标题和标签
plt.title('Horizontal Bar Graph')
plt.ylabel('Categories')
plt.xlabel('Values')

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们使用barh函数创建了一个水平柱状图,并通过调整标签和值的位置,使得柱子在水平方向上展示。

7. 堆叠水平柱状图

类似于堆叠垂直柱状图,我们也可以创建堆叠水平柱状图来展示不同组数据的关系。下面的示例代码展示了如何创建一个堆叠水平柱状图:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values1 = [5, 10, 15, 20, 25]
values2 = [3, 7, 12, 17, 22]

# 创建堆叠水平柱状图
plt.barh(labels, values1, label='Values 1')
plt.barh(labels, values2, left=values1, label='Values 2')

# 添加标题和标签
plt.title('Stacked Horizontal Bar Graph')
plt.ylabel('Categories')
plt.xlabel('Values')

# 添加图例
plt.legend()

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们使用left参数指定了第二组柱子的起始位置,从而创建了一个堆叠水平柱状图。

8. 水平分组柱状图

类似于垂直分组柱状图,我们也可以创建水平分组柱状图来展示不同组数据的比较情况。下面的示例代码展示了如何创建一个水平分组柱状图:

import matplotlib.pyplot as plt
import numpy as np

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values1 = [5, 10, 15, 20, 25]
values2 = [3, 7, 12, 17, 22]

y = np.arange(len(labels))
height = 0.35

# 创建水平分组柱状图
plt.barh(y - height/2, values1, height, label='Values 1')
plt.barh(y + height/2, values2, height, label='Values 2')

# 添加标题和标签
plt.title('Grouped Horizontal Bar Graph')
plt.ylabel('Categories')
plt.xlabel('Values')
plt.yticks(y, labels)

# 添加图例
plt.legend()

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们使用 NumPy 生成了类别的位置信息,并通过调整height参数来控制柱子的宽度,从而创建了一个水平分组柱状图。

9. 添加误差线

在柱状图中添加误差线可以更直观地展示数据的稳定性和变化范围,下面的示例代码展示了如何在柱状图中添加误差线:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values = [5, 10, 15, 20, 25]
errors = [1, 2, 3, 1, 2]

# 创建柱状图
plt.bar(labels, values, yerr=errors, capsize=5)

# 添加标题和标签
plt.title('Bar Graph with Error Bars')
plt.xlabel('Categories')
plt.ylabel('Values')

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们通过yerr参数将误差线数据传递给柱状图,并通过capsize参数设置误差线末端的帽子大小。

10. 柱状图标签显示

有时候,我们可能需要在柱状图上显示每个柱子的数值,下面的示例代码展示了如何在柱状图上添加标签显示数值:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values = [5, 10, 15, 20, 25]

# 创建柱状图
bars = plt.bar(labels, values)

# 添加标签显示数值
for bar in bars:
    yval = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2, yval, round(yval, 1), ha='center', va='bottom')

# 添加标题和标签
plt.title('Bar Graph with Value Labels')
plt.xlabel('Categories')
plt.ylabel('Values')

# 显示图表
plt.show()

Output:

Matplotlib 柱状图

在这个示例中,我们遍历每个柱子,通过plt.text()函数在柱子上方添加标签显示数值,使得每个柱子的数值更加清晰可见。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程