当前位置: 首页 > article >正文

Python----数据分析(Matplotlib四:Figure的用法,创建Figure对象,常用的Figure对象的方法)

一、Figure的用法

        在 Matplotlib 中, Figure对象是整个绘图的顶级容器,它是所有绘图元素的基础, 提供了一个用于绘制图形的画布空间。

        在 Matplotlib 中, Axes对象是进行数据绘制和设置坐标轴等操作的核心区域,它与 Figure对象紧密相关,共同构建了完整的绘图体系。

创建Figure对象和 Axes:

1、隐式创建:当直接调用绘图函数(如plt.plot())而没有预先创建 Figure 对象时,Matplotlib 会自动隐式创建一个Figure对象和一个Axes对象。

2、显式创建:使用函数来手动创建一个 Figure对象。

二、创建Figure对象

2.1、figure

        在Matplotlib 中, figure 函数用于创建一个新的图形窗口,或者获取当前活跃的图 形窗口。每个图形窗口可以包含一个或多个坐标轴(Axes),可以在其上绘制数 据。

plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, clear=False, **kwargs)
名称描述
num可选参数,指定图形窗口的编号或名称。如果 num 为 新的图形窗口。如果 None,则创建一个 num 已经存在,则获取该图形窗口。
figsize可选参数,指定图形窗口的大小,以英寸为单位。默认为None,使用 Matplotlib 的默认值。
dpi可选参数,指定图形的分辨率,以点每英寸为单位。默认为 None,使用 Matplotlib 的默认值。
facecolor可选参数,指定图形窗口的背景颜色。默认None,使用为 Matplotlib 的默认值。
edgecolor可选参数,指定图形窗口的边缘颜色。默认为 None,使用 Matplotlib 的默认值。
frameon可选参数,布尔值,指定是否绘制图形窗口的边框。默认为True
clear可选参数,布尔值,指定是否清除图形窗口中的内容。默认为False
**kwargs其他关键字参数,用于进一步自定义图形窗口的属性。
import matplotlib.pyplot as plt



plt.plot([0, 1], [1, 2])
fig = plt.figure(num=1, clear=True)
plt.plot([0, 1], [2, 3])

plt.show()

 

2.2、subplots

        在Matplotlib中, subplots用于创建包含多个子图(subplot)的图形。这允许你在 同一个 Figure 对象内组织多个图表,从而方便地比较数据或者展示多方面的信息。

fig, axs = matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, width_ratios=None, height_ratios=None, subplot_kw=None, gridspec_kw=None)
名称描述
nrows=1子图的行数,设置为1,表示创建一个子图的行。
ncols=1子图的列数,设置为1,表示创建一个子图的列。
sharex=False布尔值,设置为False,表示子图之间不共享x轴刻度。每个子图 都有自己的x轴。
sharey=False布尔值,设置为False,表示子图之间不共享y轴刻度。每个子图 都有自己的y轴。
squeeze=True布尔值,设置为True,表示如果只创建了一个子图,则返回一 个子图对象而不是一个只包含一个子图对象的数组。
width_ratios=None列宽比例的序列,设置为None表示默认比例。如果提供 序列,它将用于调整各列的宽度比例。
height_ratios=None行高比例的序列,设置为None表示默认比例。如果提供 序列,它将用于调整各行的高度比例。
subplot_kw=None字典,设置为None,表示没有额外的关键字参数传递给 add_subplot调用。如果需要,可以传递一个字典来设置子图的属性。
gridspec_kw=None字典,设置为None,表示没有额外的关键字参数传递给 GridSpec对象。如果需要,可以传递一个字典来控制子图的布局。

 
 
import numpy as np
import matplotlib.pyplot as plt
 
# 创建数据
x = np.arange(-10, 10, 0.01)
y1 = np.sin(x) + 100
y2 = np.cos(x)
y3 = np.tan(x)
y4 = 1 / (1 + np.exp(-x))  # Sigmoid function
 
# 创建一个 2x2 的子图网格
fig, axs = plt.subplots(2, 2)
 
 
# 第一个子图
axs[0, 0].plot(x, y1)
axs[0, 0].set_title('Sine Wave')
axs[0, 0].set_xlabel('X-axis')
axs[0, 0].set_ylabel('Y-axis')

# 第二个子图
axs[0, 1].plot(x, y2)
axs[0, 1].set_title('Cosine Wave')
axs[0, 1].set_xlabel('X-axis')
axs[0, 1].set_ylabel('Y-axis')

# 第三个子图
axs[1, 0].plot(x, y3)
axs[1, 0].set_title('Tangent Wave')
axs[1, 0].set_xlabel('X-axis')
axs[1, 0].set_ylabel('Y-axis')

# 第四个子图
axs[1, 1].plot(x, y4)
axs[1, 1].set_title('Sigmoid Function')
axs[1, 1].set_xlabel('X-axis')
axs[1, 1].set_ylabel('Y-axis')
 
# 调整子图间距
plt.tight_layout()
 
# 显示图形
plt.show()

 

三、常用的Figure对象的方法

3.1、add_subplot

fig.add_subplot(nrows, ncols, plot_number)
名称描述
nrows子图的总行数。
ncols子图的总列数。
plot_number当前子图在其所在布局中的位置,从1开始计数,从左上角到右 下角。

该函数会返回一个 Axes 对象。 

import matplotlib.pyplot as plt

# 创建一个图形窗口
fig = plt.figure()

# 添加第一个子图,位于2行1列布局中的第1个位置
ax1 = fig.add_subplot(2, 1, 1)
ax1.plot([0, 1], [0, 1])
ax1.set_title('00')

# 添加第二个子图,位于2行1列布局中的第2个位置
ax2 = fig.add_subplot(2, 1, 2)
ax2.plot([0, 1], [1, 0])
ax2.set_title('01')

plt.tight_layout()

# 显示图形
plt.show()

3.2、add_axes

        该函数允许你在图形( Figure)中的任意位置添加一个子图(Axes)。与subplots 或 add_subplot 不同,add_axes允许你精确地指定子图的位置和大小。

matplotlib.figure.Figure.add_axes(rect, **kwargs)
名称描述
rect一个形如 [左边界, 底边界, 宽度, 高度] 的列表,指定子图的位置和大 小。这些值是在归一化坐标中的,其中 0 表示图形的左边界,1 表示右边界,0 表示底部,1 表示顶部。
**kwargs其他可选的关键字参数,用于控制子图的属性。
import matplotlib.pyplot as plt

# 创建一个图形
fig = plt.figure()

# 添加一个子图,位置是图形左下角的1/4处,大小为图形宽度的1/2和高度的1/2
ax = fig.add_axes([0.5, 0.1, 0.5, 0.5])

# 使用这个子图绘制一些数据
ax.plot([0, 1], [0, 1])

# 显示图形
plt.show()

3.3、suptitle

        该函数用于在图形( Figure)上添加一个中心对齐的标题,这个标题位于所有子图 (Axes)的顶部。使用 suptitle 可以为整个图形设置一个总标题,而不仅仅是单 个子图。

matplotlib.figure.Figure.suptitle(t, **kwargs)
名称描述
t字符串,表示要添加的标题文本。
**kwargs其他可选的关键字参数,用于控制标题的样式,如字体大小 (fontsize)、颜色( color)等。
import matplotlib.pyplot as plt

# 创建一个图形
fig = plt.figure()

# 在图形上添加两个子图
ax1 = fig.add_subplot(121)  # 第一个子图,两行一列的第一个位置
ax2 = fig.add_subplot(122)  # 第二个子图,两行一列的第二个位置

# 使用第一个子图绘制一些数据
ax1.plot([0, 1], [0, 1])
ax1.set_title('ax1')


# 使用第二个子图绘制一些数据
ax2.plot([0, 1], [1, 0])
ax2.set_title('ax2')
# 为整个图形添加一个总标题
fig.suptitle('Test Suptitle', fontsize=16, color='red')

# 显示图形
plt.show()

3.4、text

        该函数用于在图表的任意位置添加文本,通常在 的指定坐标位置上放置文本。

matplotlib.axes.Axes.text(x, y, s, **kwargs)
名称描述
x, y浮点数或数组,指定文本的位置坐标。
s字符串,要添加的文本内容。
**kwargs其他可选的关键字参数,用于控制文本的样式,如 体大小)、 color(颜色)、 fontsize(字 horizontalalignment(水平对齐方式,如 ‘left’, ‘center’, ‘right’)、 verticalalignment(垂直对齐方式,如 ‘top’, ‘center’, ‘bottom’)等。
import matplotlib.pyplot as plt

# 创建一个图形和一个子图
fig, ax = plt.subplots()

# 绘制一些数据
ax.plot([0, 1, 2], [0, 1, 0])

# 在坐标 (1, 0.5) 处添加文本
ax.text(1, 0.5, 'Sample Text', fontsize=12, color='red',
        horizontalalignment='right', verticalalignment='top')

# 显示图形
plt.show()

3.5、axes

        在 matplotlib中,如果你想要获取一个图形(Figure)中的所有轴(Axes )你可以査看 Figure 对象的 axes 属性。

import matplotlib.pyplot as plt

# 创建一个图形和一个子图
fig, ax = plt.subplots(2, 2)

# 获取图形中的所有轴
axes = fig.axes


# axes 是一个包含所有轴的列表
for ax in axes:
    # 包含了每一个轴的x和y的相对位置(从左下角开始计算)、轴的宽度和高度(相对于整个图形)
    print(ax)

# 显示图像
plt.show()

3.6、get_facecolor

        该函数是一个用于获取轴(Axes)或填充区域(Patch)背景色的方法。具体来说, 它返回一个表示颜色的 RGBA 元组,其中 RGBA 分别代表红色、绿色、蓝色和 alpha(透明度)值。这些值通常在 0 到 1 的范围内。

import matplotlib.pyplot as plt

# 创建一个图形
fig = plt.figure(figsize=(8, 6), facecolor='blue')

# 获取背景色
facecolor = fig.get_facecolor()
print(facecolor)

# 显示图像
plt.show()
 

3.7、get_dpi

        该方法用于获取图形(Figure)对象的分辨率。

import matplotlib.pyplot as plt

# 创建一个图形对象
fig = plt.figure(dpi=120)

# 获取图形的DPI
dpi = fig.get_dpi()
print(f"The DPI of the figure is: {dpi}")

# 显示图像
plt.show()

3.8、get_gca

        该函数是 “get current axis” 的缩写,它用于获取当前图形(figure)中的当前坐标 轴(axis)对象。这个函数非常有用,因为它允许你访问并修改当前活动的坐标轴的 属性。

import matplotlib.pyplot as plt

# 创建一个图形和坐标轴
plt.figure()
plt.plot([1, 2, 3], [1, 2, 3])

# 获取当前坐标轴
ax = plt.gca()

# 使用坐标轴对象进行自定义
ax.set_title('Sample Plot')
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')

# 显示图形
plt.show()

 

3.9、get_label

        该方法用于获取坐标轴(例如,线和柱状图)的标签。这个方法通常用于获取已经设 置好的标签,以便于后续的检查或修改。

import matplotlib.pyplot as plt

# 创建一些数据
x = [1, 2, 3]
y = [1, 2, 3]

# 绘制线图并设置标签
line, = plt.plot(x, y, label='Line 1')

# 获取线的标签
label = line.get_label()
print('Label of the line:', label)

# 显示图形和图例
plt.legend()
plt.show()

3.10、get_size_inches

        该方法用于获取图形的大小,以英寸为单位。

import matplotlib.pyplot as plt

# 创建一个图形对象,可以指定大小(宽度,高度)单位为英寸
fig = plt.figure(figsize=(8.0, 6.0))

# 使用 get_size_inches() 方法获取图形的大小
size_in_inches = fig.get_size_inches()
print('Size of the figure in inches:', size_in_inches)

# 绘制一些数据
plt.plot([1, 2, 3], [1, 2, 3])

# 显示图形
plt.show()

3.11、set_size_inches

        该方法用于设置图形对象的大小,单位为英寸。这个方法允许用户在创建图形后改变 其尺寸,从而影响输出图像的分辨率和显示效果。

matplotlib.figure.Figure.set_size_inches(width, height, forward=True)
名称描述
width, height浮点数,指定图形的宽度和高度,单位为英寸。
forward布尔值,默认为 True。如果为 True,则在调整图形大小时,同时 更新所有子图的大小和位置。如果为 False,则仅改变图形的大小,而不更新子 图。
import matplotlib.pyplot as plt

# 创建一个图形对象
fig = plt.figure(figsize=(2, 2))

# 使用 set_size_inches 方法设置图形的大小
fig.set_size_inches(10, 6)  # 设置宽度为10英寸,高度为6英寸

# 绘制一些数据
plt.plot([1, 2, 3], [1, 2, 3])

# 显示图形
plt.show()

3.12、set_dpi

        该方法用于设置图形对象的分辨率,单位为每英寸点数(Dots Per Inch, DPI)。这 个方法影响输出图像的质量和文件大小,通常与 精确控制图形的尺寸和输出质量。        

matplotlib.figure.Figure.set_dpi(dpi)
名称描述
dpi一个浮点数或整数,指定图形的分辨率,即每英寸的点数。
import matplotlib.pyplot as plt

# 创建一个图形对象
fig, ax = plt.subplots()

# 设置图形的尺寸为 6x4 英寸
fig.set_size_inches(10, 6)

# 使用 set_dpi 方法设置图形的分辨率
fig.set_dpi(200)  # 设置分辨率为 100 DPI

# 绘制一些数据
ax.plot([1, 2, 3], [1, 2, 3])


print(fig.get_size_inches())
print(fig.get_dpi())

# 显示图形
plt.show()

3.13、tight_layout

        该函数用于自动调整子图参数,使之填充整个图像区域,同时确保子图之间的标签和 标题不会重叠。这个方法对于创建布局整齐的图形非常有用,尤其是在子图较多或标 签较长时。

import matplotlib.pyplot as plt

# 创建一个包含多个子图的图形
fig, axs = plt.subplots(2, 2)

# 在每个子图中绘制一些数据
axs[0, 0].plot([1, 2, 3], [1, 2, 3])
axs[0, 0].set_title('00')
axs[0, 0].set_xlabel('x')
axs[0, 0].set_ylabel('y')


axs[0, 1].plot([1, 2, 3], [3, 2, 1])
axs[0, 1].set_title('01')
axs[0, 1].set_xlabel('x')
axs[0, 1].set_ylabel('y')

axs[1, 0].plot([1, 2, 3], [1, 3, 2])
axs[1, 0].set_title('10')
axs[1, 0].set_xlabel('x')
axs[1, 0].set_ylabel('y')

axs[1, 1].plot([1, 2, 3], [2, 1, 3])
axs[1, 1].set_title('11')
axs[1, 1].set_xlabel('x')
axs[1, 1].set_ylabel('y')


# 使用 tight_layout 自动调整子图布局
plt.tight_layout()

# 显示图形
plt.show()

3.14、subplots_adjust

        该函数允许用户手动调整子图之间的空间,以及子图与图形边缘之间的空间。这个方 法提供了比 tight_layout 更细粒度的控制,特别适用于需要精确控制布局的情 况。

fig.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
名称描述
left子图区域左边缘与图形左边缘之间的距离,范围从 0 到 1。
bottom子图区域下边缘与图形下边缘之间的距离,范围从 0 到 1。
right子图区域右边缘与图形右边缘之间的距离,范围从 0 到 1。
top子图区域上边缘与图形上边缘之间的距离,范围从 0 到 1。
wspace子图之间的水平间距,范围从 0 到 1。
hspace子图之间的垂直间距,范围从 0 到 1。
import matplotlib.pyplot as plt

# 创建一个包含多个子图的图形
fig, axs = plt.subplots(2, 2)

# 在每个子图中绘制一些数据
axs[0, 0].plot([1, 2, 3], [1, 2, 3])
axs[0, 1].plot([1, 2, 3], [3, 2, 1])
axs[1, 0].plot([1, 2, 3], [1, 3, 2])
axs[1, 1].plot([1, 2, 3], [2, 1, 3])

# 使用 subplots_adjust 手动调整子图布局
plt.subplots_adjust(left=0.1, right=0.7, top=0.9, bottom=0.1, hspace=0.2, wspace=0.2)

# 显示图形
plt.show()

3.15、clear

        在matplotlib库中, Axes对象(代表绘图区域)和 都有clear函数。 Axes对象的 Figure对象(代表整个图形) clear函数主要用于清除该轴(子图)上的所有图形 元素,包括线条、标记、文本、图像等; Figure对象的 clear函数用于清除整个图 形中的所有子图和其他相关元素

import matplotlib.pyplot as plt
 
# 创建一个包含多个子图的图形
fig, axs = plt.subplots(2, 2)
 
# 在每个子图中绘制一些数据
axs[0, 0].plot([1, 2, 3], [1, 2, 3])
axs[0, 1].plot([1, 2, 3], [3, 2, 1])
axs[1, 0].plot([1, 2, 3], [1, 3, 2])
axs[1, 1].plot([1, 2, 3], [2, 1, 3])
 
# 使用 tight_layout 自动调整子图布局
fig.tight_layout()
 
# # Axes对象的clear
# axs[0, 0].clear()
 
# Figure对象的clear
fig.clear()
 
# 显示图形
plt.show()

http://www.kler.cn/a/572638.html

相关文章:

  • alloc、malloc 与 allocator:内存管理三剑客
  • 7.1 Hugging Face PEFT 快速入门:参数高效微调实战指南
  • Cpu100%问题处理(包括-线上docker服务)
  • 基于Asp.net的农产品销售管理系统
  • DeepSeek R1助力,腾讯AI代码助手解锁音乐创作新
  • 使用JMeter(组件详细介绍+使用方式及步骤)
  • YOLO11改进-模块-引入多尺度小波池化变压器MWPT 通过结合小波变换、多尺度池化以及门控机制等技术解决多尺度、小目标、边缘模糊等问题
  • 服务器CPU微架构
  • 国产编辑器EverEdit - 工具栏自定义及认识工具栏上的按钮
  • Linux:文件系统的初步认识
  • 蓝桥杯 之 贪心与排序
  • 大模型gpt结合drawio绘制流程图
  • (二 十 三)趣学设计模式 之 解释器模式!
  • 【单片机】嵌入式系统大纲
  • 关于 QPalette设置按钮背景未显示出来 的解决方法
  • Jmeter简单的压力测试
  • 探索AIGC未来:通义万相2.1与蓝耘智算平台的完美结合释放AI生产力
  • K8s控制器Deployment详解
  • linux文件系统,文件管理
  • WebP2P技术在嵌入式设备中的应用:EasyRTC音视频通话SDK如何实现高效通信?