Matplotlib绘制子图

简介: 有时,我们希望检查数据的多个方面间的关系,例如我们不仅希望得到时间与温度的关系,同时我们也需要关注时间与风力等方面之间的关系,Matplotlib提供了将多个图形组合在一起的方法。

多个子图的合成

有时,我们希望检查数据的多个方面。例如,查看一个地区的天气状况,我们不仅希望得到时间与温度的关系,同时我们也需要关注时间与风力、PM2.5 等方面之间的关系,此时我们希望同时展现时间-温度、时间-风力、时间-PM2.5三个不同的图形,Matplotlib 提供了将多个图形组合在一起的方法。

importnumpyasnpfrommatplotlibimportpyplotaspltt=np.linspace(-np.pi, np.pi, 1024)
grid_size= (4, 2)
plt.subplot2grid(grid_size, (0, 0), rowspan=3, colspan=1)
plt.plot(np.sin(2*t), np.cos(0.5*t), c='m')
plt.subplot2grid(grid_size, (0, 1), rowspan=3, colspan=1)
plt.plot(np.cos(3*t), np.sin(t), c='c')
plt.subplot2grid(grid_size, (3, 0), rowspan=1, colspan=3)
plt.plot(np.cos(5*t), np.sin(7*t), c='y')
plt.tight_layout()
plt.show()

绘图82.png

Tips:使用 plt.subplot2grid() 可以定义一个 R 行、C 列的网格。然后,我们可以将一个图形渲染到所定义的网格中。

plt.subplot2grid() 函数有四个常用参数:

1. 第一个参数是网格的行数和列数,作为元组传递,例如我们想要一个 R 行、C 列的网格,则需要传递(R,C)。

2. 第二个参数用于确定图形在网格中的坐标,也作为元组传递。

3. 可选参数 rowspan 定义图形将占据多少行。

4. 可选参数 colspan 定义图形将占据多少列。

调用 plt.subplot2grid() 后,对 plt 绘图的下一次调用将在指定的矩形区域内绘制图形,同理,要在网格的另一个区域中绘制下一个图形,需要再次调用 plt.subplot2grid()。

在示例中,定义了一个 2x4 的网格。前两个图形占据了 1 列、3 行,第三个图形占据了两列、一行。一旦绘制了所有的图形,就需要调用 pyplot.tight_layout() 按照定义自动排列所有图形,确保它们彼此不重叠。

为每个子图添加标题

我们已经可以将多个子图合成在一个图形中,但是每个子图可能还需要有自己的标题,可以使用 plt.title() 为每个子图添加标题:

importnumpyasnpfrommatplotlibimportpyplotaspltdefget_radius(t, params):
m, n_1, n_2, n_3=paramsu= (m*t) /4return (np.fabs(np.cos(u)) **n_2+np.fabs(np.sin(u)) **n_3) ** (-1./n_1)
grid_size= (3, 4)
t=np.linspace(0, 2*np.pi, 1024)
foriinrange(grid_size[0]):
forjinrange(grid_size[1]):
params=np.random.randint(1, 20+1, size=4)
r=get_radius(t, params)
plt.subplot2grid(grid_size, (i, j), rowspan=1, colspan=1)
plt.plot(r*np.cos(t), r*np.sin(t), c='c')
plt.title('%d, %d, %d, %d'%tuple(params), fontsize='small')
plt.suptitle("Example of plt.suptitle")
plt.tight_layout()
plt.show()

绘图83.png

Tips:plt.title() 函数可以为每一个图形提供一个标题,但此时,如果我们需要为整个图形提供一个标题,则应该使用 plt.suptitle() 函数。

子图合成的另一种方法

上述的子图合成方法具有通用性,可以使用它创建复杂的布局,但如果我们只需要在同一行或同一列中绘制多个子图,则可以使用更简洁的代码:

importnumpyasnpfrommatplotlibimportpyplotaspltt=np.linspace(-np.pi, np.pi, 1024)
fig, (ax0, ax1, ax2) =plt.subplots(ncols=3)
ax0.plot(np.sin(2*t), np.cos(0.5*t), c='c')
ax1.plot(np.cos(3*t), np.sin(t), c='c')
ax2.plot(np.cos(3*t), np.sin(2*t), c='c')
plt.tight_layout()
plt.show()

绘图85.png

Tips:plt.subplots() 函数接受两个可选参数 ncols 和 nrows,并返回一个带有 ncols*nrows 轴实例的 Figure 对象。轴实例按 nrows 行、ncols 列排列在网格中。

更简洁的方法

虽然上述两种方法都可以实现合成子图的应用需求,但是我们需要的远不止此,我们可能想要更简洁的方法,而 plt.subplot() 函数就是我们所需要的。

importnumpyasnpfrommatplotlibimportpyplotaspltdefget_radius(t, params):
m, n_1, n_2, n_3=paramsu= (m*t) /4return (np.fabs(np.cos(u)) **n_2+np.fabs(np.sin(u)) **n_3) ** (-1./n_1)
grid_size= (3, 4)
t=np.linspace(0, 2*np.pi, 1024)
foriinrange(grid_size[0] *grid_size[1]):
params=np.random.random_integers(1, 20, size=4)
r=get_radius(t, params)
plt.subplot(grid_size[0], grid_size[1], i+1)
plt.plot(r*np.cos(t), r*np.sin(t), c='c')
plt.title('%d, %d, %d, %d'%tuple(params), fontsize='small')
plt.suptitle("Example of plt.suptitle")
plt.tight_layout()
plt.show()

绘图84.png

Tips:plt.subplot() 函数接收三个参数,分别为行数,列数,以及子图的位序,直接指定划分网格的方式和需要绘图的位置索引。

相关文章
|
5月前
|
数据可视化 搜索推荐 关系型数据库
深入了解Matplotlib中的子图创建方法
深入了解Matplotlib中的子图创建方法
123 0
|
数据可视化 关系型数据库 索引
【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码
【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码
148 0
|
数据可视化 前端开发 UED
matplotlib图形整合之多个子图一起绘制
matplotlib图形整合之多个子图一起绘制
679 0
matplotlib图形整合之多个子图一起绘制
|
数据可视化 Python
可视化库Matplotlib-子图
可视化库Matplotlib-子图
可视化库Matplotlib-子图
|
Web App开发 Python
01 matplotlib - 折线图、绘图属性、Web安全色、子图、保存画板
=== 折线图 - 头文件 === 解决: 1、中文显示问题 2、图像行内外显示 3、处理闪退问题 import matplotlib.pyplot as plt import numpy as np import pandas as pd # 解决中文显示问题 import matplotlib as mpl mpl.
1941 0
|
索引 Python
Matplotlib 中文用户指南 3.3 使用 GridSpec 自定义子图位置
使用 GridSpec 自定义子图位置 原文:Customizing Location of Subplot Using GridSpec 译者:飞龙 协议:CC BY-NC-SA 4.0 GridSpec 指定子图将放置的网格的几何位置。
1336 0
|
29天前
|
Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
|
1月前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
41 1
|
1月前
|
存储 数据可视化 数据挖掘
揭秘!Matplotlib与Seaborn联手,如何让Python数据分析结果一目了然,惊艳全场?
在数据驱动时代,高效直观地展示分析结果至关重要。Python中的Matplotlib与Seaborn是两大可视化工具,结合使用可生成美观且具洞察力的图表。本文通过分析某电商平台的商品销量数据集,展示了如何利用这两个库揭示商品类别与月份间的销售关系及价格对销量的影响。首先使用Matplotlib绘制月份销量分布直方图,再借助Seaborn的箱线图进一步探索不同类别和价格区间下的销量稳定性。
52 10