Matplotlib中的条形图(Bar Chart)

Matplotlib中的条形图(Bar Chart)

参考:bar chart matplotlib

条形图是数据可视化中最常用的图表类型之一,它用于显示和比较不同类别之间的数量关系。在Python的Matplotlib库中,创建条形图可以通过bar函数实现,对于水平条形图,则可以使用barh函数。本文将详细介绍如何使用Matplotlib创建各种条形图,并通过10-20个示例代码展示不同的用法和技巧。

基本条形图

首先,我们从最基本的条形图开始。以下是一个简单的示例,展示了如何创建一个基本的垂直条形图。

import matplotlib.pyplot as plt

categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]

plt.bar(categories, values)
plt.title('Basic Bar Chart - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()

Output:

Matplotlib中的条形图(Bar Chart)

水平条形图

如果你想创建一个水平的条形图,可以使用barh函数。下面的代码展示了如何实现这一点。

import matplotlib.pyplot as plt

categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]

plt.barh(categories, values, color='skyblue')
plt.title('Horizontal Bar Chart - how2matplotlib.com')
plt.xlabel('Values')
plt.ylabel('Categories')
plt.show()

Output:

Matplotlib中的条形图(Bar Chart)

自定义颜色和边框

你可以通过传递参数来自定义条形图的颜色、边框颜色和宽度。以下示例展示了如何进行自定义。

import matplotlib.pyplot as plt

categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]

plt.bar(categories, values, color='lightgreen', edgecolor='black', linewidth=1)
plt.title('Custom Colors and Borders - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()

Output:

Matplotlib中的条形图(Bar Chart)

多组数据

当你有多组数据需要在同一个图表中比较时,可以通过调整条形的位置来实现。以下代码展示了如何绘制两组数据的条形图。

import matplotlib.pyplot as plt
import numpy as np

categories = ['Category A', 'Category B', 'Category C']
values1 = [23, 45, 56]
values2 = [33, 28, 40]

x = np.arange(len(categories))
width = 0.4

plt.bar(x - width/2, values1, width, label='Group 1')
plt.bar(x + width/2, values2, width, label='Group 2')

plt.xticks(x, categories)
plt.title('Multiple Groups - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.legend()
plt.show()

Output:

Matplotlib中的条形图(Bar Chart)

堆叠条形图

堆叠条形图可以帮助我们比较各个类别中不同组的相对大小。以下示例代码展示了如何创建一个堆叠条形图。

import matplotlib.pyplot as plt

categories = ['Category A', 'Category B', 'Category C']
values1 = [23, 45, 56]
values2 = [15, 30, 20]

plt.bar(categories, values1, label='Group 1')
plt.bar(categories, values2, bottom=values1, label='Group 2')

plt.title('Stacked Bar Chart - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.legend()
plt.show()

Output:

Matplotlib中的条形图(Bar Chart)

添加文本标签

在条形图上添加文本标签可以使图表的信息更加清晰。以下代码展示了如何在每个条形上添加值标签。

import matplotlib.pyplot as plt

categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]

bars = plt.bar(categories, values)

for bar in bars:
    yval = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2, yval, int(yval), ha='center', va='bottom')

plt.title('Bar Chart with Labels - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()

Output:

Matplotlib中的条形图(Bar Chart)

自定义刻度标签

有时候,默认的刻度标签可能不符合我们的需求,这时可以自定义刻度标签。以下代码展示了如何进行自定义。

import matplotlib.pyplot as plt

values = [23, 45, 56]
labels = ['Category A', 'Category B', 'Category C']
custom_labels = ['Cat A - how2matplotlib.com', 'Cat B - how2matplotlib.com', 'Cat C - how2matplotlib.com']

plt.bar(labels, values)
plt.xticks(labels, custom_labels, rotation=45)
plt.title('Custom Tick Labels - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()

Output:

Matplotlib中的条形图(Bar Chart)

条形图的美化

Matplotlib提供了大量的参数和方法来美化条形图,包括颜色、样式、图例和注释等。以下是一个综合示例,展示了如何创建一个美观的条形图。

import matplotlib.pyplot as plt
import numpy as np

categories = ['Category A', 'Category B', 'Category C']
values = [23, 45, 56]

plt.figure(figsize=(8, 4))
bars = plt.bar(categories, values, color=['#1f77b4', '#ff7f0e', '#2ca02c'], edgecolor='black')

plt.title('Beautiful Bar Chart - how2matplotlib.com')
plt.xlabel('Categories')
plt.ylabel('Values')

# 添加值标签
for bar in bars:
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width() / 2, height, '%d' % int(height), ha='center', va='bottom')

plt.tight_layout()
plt.show()

Output:

Matplotlib中的条形图(Bar Chart)

通过上述示例代码,我们可以看到Matplotlib在创建条形图方面的灵活性和强大功能。无论是基本的条形图、水平条形图、自定义样式的条形图,还是更复杂的堆叠条形图和多组数据的条形图,Matplotlib都能够轻松应对。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程