3、plt.figure()和Axes类

本文介绍了Matplotlib里的Figure类和Axes类。Figure类是绘图元素的顶层容器,相当于画布;Axes对象是有数据空间的区域。还介绍了二者的区别,以及plt.、ax.、fig三种画图模式的差异,同时给出了相关实例。

Figure类和Axes类

本文从介绍一下Figure类和Axes类,二者的区别,以及一些实例。

1、Figure类

matplotlib.figure模块包含了Figure类。它是所有绘图元素的顶层容器。Figure对象是通过调用pyplot模块中的fig()函数来实例化的,如下所示。(简单来说,Figure就是给我们画图提供了一个画布,这个画布的参数我们可以通过Figure类进行调整和修改,画布弄好之后才方便在上面作图)

fig = plt.figure()

它有一下几个参数:

参数解释
figsize(宽,高),是个元组,表示Figure的大小
dpi每英寸的点数,也就是分辨率
facecolor画布的颜色
edgecolor画布的边缘颜色
linewidth边缘的线宽

下面来具体的看一个实例:

from matplotlib import pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
fig = plt.figure(figsize=(8,4),dpi=144,facecolor='r')
ax = fig.add_axes([0,0,0.7,0.7])
ax.plot(x,y)
ax.set_title("sine wave")
ax.set_xlabel('angle')
ax.set_ylabel('sine')
plt.show()

显示结果如下,我们可以看到,这个figure实际是画布的背景,我们画的图是在axes上画的。
在这里插入图片描述

2、Axes类

Axes对象是图像中具有数据空间的区域。一个给定的图可以包含许多Axes,但一个给定的Axes对象只能在一个图中。通过调用add_axes()方法将轴对象添加到图形中。它返回axes对象,并在矩形[左,底,宽,高]的位置添加一个轴(效果见此处链接),其中所有的数量都是图形宽度和高度的分数,这里不过多介绍。
以下是axes类的成员函数,它们为绘图添加了不同的元素:
函数1:Legend:axes类的legend()方法为绘图图添加了一个图例。它需要三个参数:

ax.legend(handles, labels, loc)

其中label是一个字符串序列,并处理Line2D或Patch实例的序列。loc可以是一个字符串或一个整数,指定图例的位置。
在这里插入图片描述
函数2:axes.plot(),这是axes类的基本方法,它将一个数组的值与另一个数组的值以线或标记的形式绘制出来。plot()方法可以有一个可选的格式字符串参数来指定线条和标记的颜色、样式和大小。

axes.plot()

颜色:
在这里插入图片描述
样式:
在这里插入图片描述
线型:
在这里插入图片描述

举例如下:

例1:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(20)

fig = plt.figure()
ax = plt.subplot(111)

for i in range(4):
    ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend(loc=0)

plt.show()

显示结果如下,loc为0,系统默认会选择一个最好的位置,label为这些图例的内容
在这里插入图片描述
例2:

import matplotlib.pyplot as plt
y = [1, 4, 9, 16, 25,36,49, 64]
x1 = [1, 16, 30, 42,55, 68, 77,88]
x2 = [1,6,12,18,28, 40, 52, 65]
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
l1 = ax.plot(x1,y,'ys-') # solid line with yellow colour and square marker
l2 = ax.plot(x2,y,'go--') # dash line with green colour and circle marker
ax.legend(labels = ('tv', 'Smartphone'), loc = 'lower right') # legend placed at lower right
ax.set_title("Advertisement effect on sales")
ax.set_xlabel('medium')
ax.set_ylabel('sales')
plt.show()

显示结果如下:

在这里插入图片描述

3、plt./ax./fig的区别

在matplotlib中,有两种画图模式:

一种是plt.系列,这个plt.提供了一些基本的函数,可以画一些简单的图,如果你想要精细的画图,这种画图模式就不得行了。于是,有了第二种方法。

另一种是fig,ax = plt.subplots(),这种是通过axes来画的,通过指定figure和axes,对axes进行单独操作。建议画图都用这种。

为了更好的说明我们的参数和图的对应关系,见下图:(点此查看官网解释
在这里插入图片描述
下面看官网对上图的整体解释:

整个人物(标记为外红框)。图中记录了所有的子Axes、少量的 "特殊 "艺术家(标题、图例等)和画布。不要太担心画布,它是至关重要的,因为它是实际做画的对象,让你得到你的剧情,但作为用户,它对你来说多少是看不见的)。一个图形可以有任何数量的Axes,但为了有用,至少应该有一个。
通俗解释: 红外框的就是画布,要在画布上进行创作,这个画布上可以有一定数量的Axes,就是图中蓝色线框住的部分,你需要在这个画布上画多少图,那么就需要有多少个Axes,比如,如果你的figure有subplot,也就是子图的画,每个子图就是一个Axes。

官网对上图中的Axes的解释:

这就是你所认为的 “一个图”,它是图像中具有数据空间的区域(标记为蓝色内框)。一个给定的图可以包含许多Axes,但一个给定的Axes对象只能在一个图中。Axes包含两个(如果是3D,则是三个)Axis对象(要注意Axes和Axis之间的区别),它负责数据的限制(数据限制也可以通过set_xlim()和set_ylim()Axes方法来控制)。每个Axes都有一个标题(通过set_title()设置),一个x-label(通过set_xlabel()设置)和一个y-label(通过set_ylabel()设置)。
**通俗解释:**就是Axes很吊,可以修改设置的变量非常多。

官网对上图中Axis的解释:

这些是类似数字线的对象(绿色圈出)。它们负责设置图形限制和生成tick(轴上的标记)和ticklabels(标记tick的字符串)。标记的位置由Locator对象决定,ticklabel字符串由Formatter格式化。正确的Locator和Formatter的组合可以对tick位置和标签进行非常精细的控制。
通俗解释: Axis,为图中绿色圈出的坐标轴部分,这部分可以进行精细的修改和调整。比如用ax.xaxis和ax.yaxis调整坐标轴。

官网也对Figure对分进行了精细的名称定位,方便修改官网见此。如下图所示:
在这里插入图片描述
上图给出了各个部分的名称,也可以说是关键字,方便我们查询调整。

在 Matplotlib 中,`plt.figure` `plt.subplot` 是用于创建管理图形(Figure)与子图(Axes)的核心函数。它们提供了灵活的方式来组织多个图表内容,适用于数据可视化任务中的布局设计。 ### `plt.figure` `plt.figure` 用于创建一个新的图形对象,并可以设置其大小、分辨率等属性。它通常作为绘图流程的起点,特别是在需要多图排列或自定义画布时非常有用。例如: ```python import matplotlib.pyplot as plt # 创建一个指定大小的 Figure 对象 fig = plt.figure(figsize=(10, 5), dpi=100) # 可以通过 add_subplot 方法添加子图 ax1 = fig.add_subplot(121) ax1.plot([1, 2, 3], [4, 5, 1]) ax1.set_title("First Subplot") ax2 = fig.add_subplot(122) ax2.plot([1, 2, 3], [1, 5, 4]) ax2.set_title("Second Subplot") plt.show() ``` 该方法支持多种参数来控制图形的外观,包括 `figsize`(图形尺寸)、`dpi`(分辨率)等[^2]。 ### `plt.subplot` `plt.subplot` 用于在当前图形中创建子图。它接受三个整数参数:行数、列数当前子图索引(从 1 开始)。例如,`plt.subplot(2, 2, 1)` 表示将图形划分为 2 行 2 列,并选择第 1 个子图进行绘制。代码示例如下: ```python # 创建一个包含 2x2 子图的图形 plt.subplot(2, 2, 1) plt.plot([1, 2, 3], [4, 5, 1]) plt.title("Top Left") plt.subplot(2, 2, 2) plt.plot([1, 2, 3], [1, 5, 4]) plt.title("Top Right") plt.subplot(2, 2, 3) plt.plot([1, 2, 3], [3, 2, 1]) plt.title("Bottom Left") plt.subplot(2, 2, 4) plt.plot([1, 2, 3], [2, 3, 4]) plt.title("Bottom Right") plt.tight_layout() # 自动调整子图之间的间距 plt.show() ``` 此方法适合快速生成多个相关但独立的图表区域,尤其在探索性数据分析中非常实用[^3]。 ### 结合使用 `plt.figure` `plt.subplot` 有时需要同时控制图形的整体属性子图的细节。可以通过 `plt.figure` 创建图形后,再使用 `add_subplot` 添加子图。例如: ```python fig = plt.figure(figsize=(8, 6)) # 添加第一个子图 ax1 = fig.add_subplot(211) ax1.plot([1, 2, 3], [4, 5, 1]) ax1.set_title("Top Subplot") # 添加第二个子图 ax2 = fig.add_subplot(212) ax2.plot([1, 2, 3], [1, 5, 4]) ax2.set_title("Bottom Subplot") plt.tight_layout() plt.show() ``` 这种方式允许更精细地控制每个子图的布局样式,适用于复杂的可视化需求[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

steelDK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值