Matplotlib 绘制多图

Matplotlib 绘制多图

引言

Matplotlib 是一个功能强大的 Python 绘图库,它允许用户轻松地创建各种图表和图形。在数据分析、科学研究和工程领域,Matplotlib 都有着广泛的应用。本文将详细介绍如何使用 Matplotlib 绘制多图,包括子图、堆叠图和分组图等。

子图

子图(Subplots)是 Matplotlib 中最常用的绘制多图的方法之一。它允许用户在一个图上绘制多个独立的图表,每个图表称为一个子图。

创建子图

要创建一个子图,可以使用 plt.subplots() 函数。以下是一个简单的示例:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 创建子图
fig, ax = plt.subplots(2, 1)

# 绘制第一个子图
ax[0].plot(x, y1)
ax[0].set_title('Sine Wave')

# 绘制第二个子图
ax[1].plot(x, y2)
ax[1].set_title('Cosine Wave')

# 显示图形
plt.show()

在上面的代码中,我们创建了一个包含两个子图的图形。第一个子图绘制了正弦波,第二个子图绘制了余弦波。

调整子图布局

有时候,我们需要调整子图的布局,以便更好地展示图表。可以使用 subplots_adjust() 函数来调整子图之间的间距。

python 复制代码
fig, ax = plt.subplots(2, 1)
ax[0].plot(x, y1)
ax[0].set_title('Sine Wave')
ax[1].plot(x, y2)
ax[1].set_title('Cosine Wave')

# 调整子图布局
plt.subplots_adjust(hspace=0.5)

plt.show()

在上面的代码中,我们设置了子图之间的垂直间距为 0.5。

堆叠图

堆叠图(Stacked Plot)是一种将多个数据系列叠加在一起的图表。这种图表常用于展示不同类别之间的比较。

创建堆叠图

以下是一个创建堆叠图的示例:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 创建数据
x = np.arange(10)
y1 = np.random.rand(10)
y2 = np.random.rand(10)

# 创建堆叠图
ax = plt.subplot(111)
ax.bar(x, y1, label='Series 1')
ax.bar(x, y2, bottom=y1, label='Series 2')

# 添加图例
ax.legend()

# 显示图形
plt.show()

在上面的代码中,我们创建了一个堆叠图,其中包含两个数据系列。第一个数据系列位于底部,第二个数据系列叠加在第一个数据系列之上。

分组图

分组图(Grouped Plot)是一种将多个数据系列并排放置的图表。这种图表常用于展示不同类别之间的比较。

创建分组图

以下是一个创建分组图的示例:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 创建数据
x = np.arange(10)
y1 = np.random.rand(10)
y2 = np.random.rand(10)

# 创建分组图
ax = plt.subplot(111)
ax.bar(x, y1, label='Series 1')
ax.bar(x + 0.4, y2, label='Series 2')

# 添加图例
ax.legend()

# 显示图形
plt.show()

在上面的代码中,我们创建了一个分组图,其中包含两个数据系列。为了使两个数据系列并排放置,我们将第二个数据系列的 x 坐标向右移动了 0.4 个单位。

总结

本文介绍了 Matplotlib 中绘制多图的方法,包括子图、堆叠图和分组图。通过这些方法,用户可以轻松地创建各种图表和图形,以便更好地展示数据和分析结果。希望本文对您有所帮助。

相关推荐
LDR00616 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术16 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园16 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob16 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享16 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.16 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..16 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽16 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下16 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗11116 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言