简单教程 7:多子图:matplotlib.pyplot.subplot()

1、matplotlib.pyplot.subplot() 介绍

👏

matplotlib.pyplot.subplot() 方法用于创建子图布局中的一个子图。

👏

matplotlib.pyplot.subplot(*args, **kwargs)

参数解释
1. *args:通常接受三个整数参数,分别代表子图的行数、列数和子图的索引。用于指定子图在整个子图布局中的位置。
2. **kwargs:可以传递一些关键字参数,用于设置子图的属性,例如 facecolor(设置子图的背景颜色)等。

1.1、参数:*args

👏

*args:通常接受三个整数参数,分别代表子图的行数、列数和子图的索引。用于指定子图在整个子图布局中的位置。

以下是一个简单的示例:

import matplotlib.pyplot as plt

# 创建一个绘图窗体,并设置大小为 (3.5, 3)
plt.figure(figsize=(3.5, 3))

plt.subplot(2, 2, 1)
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Subplot 1')

plt.subplot(2, 2, 2)
plt.plot([2, 3, 4], [5, 6, 7])
plt.title('Subplot 2')

plt.subplot(2, 2, 3)
plt.plot([3, 4, 5], [6, 7, 8])
plt.title('Subplot 3')

plt.subplot(2, 2, 4)
plt.plot([4, 5, 6], [7, 8, 9])
plt.title('Subplot 4')

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122601.png'
  , dpi=300
  , bbox_inches='tight')

plt.show()

在这个例子中,subplot(2, 2, 1) 表示创建一个 2 行 2 列的子图布局,当前操作的是第一个子图。

1.2、参数:**kwargs

👏

**kwargs 可以传递一些关键字参数,用于设置子图的属性,例如 facecolor(设置子图的背景颜色)等。

以下是一个设置子图背景颜色的示例:

import matplotlib.pyplot as plt

# 创建一个绘图窗体,并设置大小为 (3.5, 3)
plt.figure(figsize=(3.5, 3))

plt.subplot(
    111
    , facecolor='yellow'
    )

plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Subplot with yellow background')

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122602.png'
  , dpi=300
  , bbox_inches='tight')

plt.show()

在这个例子中,通过 facecolor='yellow' 将子图的背景颜色设置为黄色。

2、matplotlib.pyplot.subplot() 调用方式

matplotlib.pyplot.subplot() 调用方式主要有一下几种:

subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(**kwargs)
subplot(ax)

以下是对 matplotlib.pyplot.subplot 不同调用方式的作用和区别:

subplot(nrows, ncols, index, **kwargs)
  • 作用: 用于创建一个子图,指定子图在一个网格中的位置。

  • 解释:
    • nrows表示整个子图网格的行数。

    • ncols表示整个子图网格的列数。

    • index表示当前子图在网格中的位置索引,从1开始计数,按照从左到右、从上到下的顺序。

    • **kwargs可以传递一些额外的参数来配置子图,比如设置坐标轴标签、标题等。

subplot(pos, **kwargs)
  • 作用: 与第一种方式类似,也是创建一个子图。

  • 解释:
    • pos是一个三位整数,格式为nrows*100 + ncols*10 + index。例如,在一个2行2列的布局中,第一个子图可以用subplot(221)来创建,等同于subplot(2, 2, 1)。这种方式更加简洁,但可读性可能稍差一些。

subplot(**kwargs)
  • 作用: 不太常用的调用方式,通常在一些特殊情况下使用。

  • 解释: 一般来说,如果没有明确指定子图的位置信息,这种方式可能会依赖于之前的子图布局状态或者一些默认的设置来创建子图。具体的行为可能不太容易预测,使用时需要谨慎。

subplot(ax)
  • 作用: 将当前的绘图操作指向一个已经存在的Axes对象。

  • 解释:
    • ax是一个已经创建好的matplotlib.axes.Axes对象。这种方式不是创建新的子图,而是复用现有的Axes对象进行绘图操作。可以用于在特定的子图上进行进一步的绘图或者修改已有子图的属性。

👏

总体来说,前两种方式是最常用的创建子图的方法,根据具体需求选择合适的方式来指定子图在网格中的位置。后两种方式相对较少使用,需要根据特定的场景和需求来决定是否采用。

2.1、:subplot(nrows, ncols, index, **kwargs)

import matplotlib.pyplot as plt

plt.subplot(2, 2, 1)
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Subplot 1')

plt.subplot(2, 2, 2)
plt.scatter([1, 2, 3], [7, 8, 9])
plt.title('Subplot 2')

plt.subplot(2, 2, 3)
plt.bar([1, 2, 3], [10, 11, 12])
plt.title('Subplot 3')

plt.subplot(2, 2, 4)
plt.pie([1, 2, 3])
plt.title('Subplot 4')

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122603.png'
  , dpi=300
  , bbox_inches='tight')

# 调整子图间隔
plt.subplots_adjust(wspace=0.2, hspace=0.4)

plt.show()

2.2、:subplot(pos, **kwargs)

import matplotlib.pyplot as plt

plt.subplot(221)
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Subplot 1')

plt.subplot(222)
plt.scatter([1, 2, 3], [7, 8, 9])
plt.title('Subplot 2')

plt.subplot(223)
plt.bar([1, 2, 3], [10, 11, 12])
plt.title('Subplot 3')

plt.subplot(224)
plt.pie([1, 2, 3])
plt.title('Subplot 4')

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122604.png'
  , dpi=300
  , bbox_inches='tight')

# 自动调整化图形布局
plt.tight_layout()

plt.show()

2.3、:subplot(**kwargs)

import matplotlib.pyplot as plt
import numpy as np

# 使用 subplot(**kwargs),这里假设根据全局参数来创建子图
plt.subplot(
    aspect='equal' # 设置子图的纵横比为相等
    , facecolor='lightgray' # 设置子图的背景颜色为浅灰色
    )
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('Sine Wave')

plt.show()

2.4、:subplot(ax)

假设之前已经有一些子图布局,现在想在特定的子图上进行一些操作,可能会用到这种方式。比如假设已经有一个 2x2 的子图布局,现在想在第 3 个子图上添加一些内容:

import matplotlib.pyplot as plt

# 创建一个3x3的网格布局,并选择第3个位置的子图
ax3 = plt.subplot(2, 2, 3)

# 在这个子图上绘图
ax3.plot([1, 2, 3], [4, 5, 6])
ax3.set_title('3x3 Grid, 5th Subplot')

ax1 = plt.subplot(2, 2, 4)

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122605.png'
  , dpi=300
  , bbox_inches='tight')

# 自动调整化图形布局
plt.tight_layout()

plt.show()

3、matplotlib.pyplot.subplot() 常用

参数解释
1. *args:通常接受三种形式的参数,用于指定子图在整个子图布局中的位置。可以是三个整数(nrows, ncols, index),表示在 nrows 行和 ncols 列的网格中,子图占据索引为 index 的位置,索引从 1 开始,从左上角向右递增;也可以是一个 3 位数整数,其各位数字分别被解释为三个单一位整数,效果与第一种形式相同,但仅在子图数量不超过 9 个时可用;还可以是一个 SubplotSpec 对象。默认值为 (1, 1, 1)。
2. projection:指定子图的投影类型,可以是 None(默认值,结果为 'rectilinear' 投影)、'aitoff'、'hammer'、'lambert'、'mollweide'、'polar' 等字符串,也可以是自定义投影的名称。
3. polar:如果为 True,等效于 projection='polar'。默认为 False
4. sharex:可以是一个 Axes 对象,用于指定与该子图共享 x 轴的轴。共享后,轴将具有相同的限制、刻度和比例。
5. sharey:可以是一个 Axes 对象,用于指定与该子图共享 y 轴的轴。共享后,轴将具有相同的限制、刻度和比例。
6. label:为返回的 Axes 对象指定一个标签字符串。

3.1、参数:*args

👏

*args 通常接受三种形式的参数,用于指定子图在整个子图布局中的位置。

import matplotlib.pyplot as plt

plt.subplot(2, 2, 1)
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Subplot 1')

plt.subplot(222)
plt.plot([2, 3, 4], [5, 6, 7])
plt.title('Subplot 2')

plt.subplot(2, 2, (3, 4))
plt.plot([3, 4, 5], [6, 7, 8])
plt.title('Subplot 3 and 4')

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122607.png'
  , dpi=300
  , bbox_inches='tight')

# 自动调整化图形布局
plt.tight_layout()

plt.show()

3.2、参数:projection

👏

projection 指定子图的投影类型。

import matplotlib.pyplot as plt

plt.subplot(
    2, 2, 1
    , projection='aitoff'
    )
plt.plot([1, 2, 3], [4, 5, 6])

plt.subplot(
    2, 2, 2
    , projection='polar'
    )
plt.plot([1, 2, 3], [4, 5, 6])

plt.subplot(
    2, 2, 3
    , projection='lambert'
    )
plt.plot([1, 2, 3], [4, 5, 6])

plt.subplot(
    2, 2, 4
    , projection='mollweide'
    )
plt.plot([1, 2, 3], [4, 5, 6])

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122608.png'
  , dpi=300
  , bbox_inches='tight')

# 自动调整化图形布局
plt.tight_layout()

plt.show()

3.3、参数:polar

👏

polar 如果为 True,等效于 projection='polar'。默认为 False

import matplotlib.pyplot as plt

plt.subplot(1, 2, 1)
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Rectilinear')

plt.subplot(1, 2, 2, polar=True)
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Polar using polar parameter')

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122609.png'
  , dpi=300
  , bbox_inches='tight')

# 自动调整化图形布局
plt.tight_layout()

plt.show()

3.4、参数:sharex

👏

sharex 可以是一个 Axes 对象,用于指定与该子图共享 x 轴的轴。共享后,轴将具有相同的限制、刻度和比例。

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 1, sharex=True)

axs[0].plot([1, 2, 3], [4, 5, 6])
axs[0].set_title('Subplot 1')

axs[1].plot([1, 2, 3], [7, 8, 9])
axs[1].set_title('Subplot 2')

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122610.png'
  , dpi=300
  , bbox_inches='tight')

# 自动调整化图形布局
plt.tight_layout()

plt.show()

3.5、参数:sharey

👏

sharey 可以是一个 Axes 对象,用于指定与该子图共享 y 轴的轴。共享后,轴将具有相同的限制、刻度和比例。

import matplotlib.pyplot as plt

fig, axs = plt.subplots(1, 2, sharey=True)

axs[0].plot([1, 2, 3], [4, 5, 6])
axs[0].set_title('Subplot 1')

axs[1].plot([1, 2, 3], [7, 8, 9])
axs[1].set_title('Subplot 2')

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122611.png'
  , dpi=300
  , bbox_inches='tight')

# 自动调整化图形布局
plt.tight_layout()

plt.show()

3.6、参数:label

👏

label 为返回的 Axes 对象指定一个标签字符串。

import matplotlib.pyplot as plt

ax = plt.subplot(
    111
    , label='my_subplot'
    )

ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Subplot with label')

plt.show()

👏

label参数为子图提供了一种可识别的标识,但在一般的简单绘图中其作用可能不太明显。下面列举具体使用案例:

import matplotlib.pyplot as plt
import numpy as np

# 创建两个子图,分别给它们不同的标签
ax1 = plt.subplot(121, label='subplot1')
ax2 = plt.subplot(122, label='subplot2')

x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

ax1.plot(x, y1)
ax1.set_title('Sine Wave')
ax2.plot(x, y2)
ax2.set_title('Cosine Wave')

# 假设现在需要对标记为'subplot2'的子图进行一些特定操作
for ax in plt.gcf().axes:
    if ax.get_label() == 'subplot2':
        ax.set_facecolor('lightgray')
        ax.set_xlabel('X Label for Subplot2')

# 保存图形为 PNG 格式
plt.savefig('matplotlib_24122613png'
  , dpi=300
  , bbox_inches='tight')

plt.show()

👏

总结matplotlib.pyplot.subplot() 方法用于创建子图布局中的一个子图。

Python 端到端的机器学习

AI入门:详细介绍机器学习建模过程,步骤细节;以及人工智能的分阶段学习线路图。

🚀 点击查看 

SQL + Pandas 练习题

SQL 练习题目,使用 Pandas 库实现,使用 Sqlalchemy 库查看 SQL 代码血缘关系。

🚀 点击查看 

Python 数据可视化

介绍了有关 Matplotlib,Seaborn,Plotly 几个 Python 绘图库的简单使用。

🚀 点击查看 
<think>好的,用户想了解matplotlib.pyplot.figure的用法,需要给出使用方法和示例。先回顾之前的对话,用户提供了几个引用,涉及plt.plot、add_subplot、图表基本设置等。现在要集中讲解figure函数。 首先,我需要明确figure的作用。figure函数用于创建新的图表窗口,可以设置大小、分辨率、背景色等参数。常见的参数如figsize、dpi、facecolor、edgecolor等需要解释清楚。 接下来,结合用户提供的引用,比如引用[2]中的add_subplot示例,可能需要说明figure和subplot的关系。用户可能对如何创建多个子图或调整图表布局感兴趣。 然后,考虑用户的示例需求。需要提供几个代码示例,展示不同参数的用法。比如设置图表大小、调整DPI、添加多个子图等。同时,要确保代码符合用户之前提到的格式要求,如行内公式用$,独立公式用$$。 还要注意用户提到的中文回答和引用标识。在回答中,适当引用之前的引用内容,比如引用[2]中的add_subplot,引用[4]中的字体设置,引用[5]中的子图创建方法。但用户提供的引用中,可能没有直接提到figure函数的例子,需要结合已有的信息进行关联。 此外,用户可能对如何保存图表感兴趣,比如引用[4]中的savefig,可以在示例中加入保存图表的部分。同时,要确保代码示例正确,比如正确使用plt.figure()后的后续操作,如添加子图、绘图、设置标题等。 还需要检查是否有常见的错误或注意事项,比如在创建多个figure时的对象管理,或者在Jupyter环境中使用%matplotlib inline等。但用户的问题可能更基础,集中在基本用法上。 最后,生成相关问题,帮助用户深入理解。比如如何调整图表布局、多个figure的管理、与subplot的区别等。这些问题应基于figure函数的常见使用场景和潜在疑问点。 总结步骤: 1. 解释figure函数的作用和常用参数。 2. 提供基础示例,展示创建图表并绘图。 3. 展示高级参数设置,如figsize、dpi等。 4. 结合子图创建,引用add_subplot的用法。 5. 添加多个子图的示例,说明多个Axes的使用。 6. 注意事项和常见问题。 7. 生成相关问题。</think>### matplotlib.pyplot.figure 使用详解 --- #### 一、核心功能 `plt.figure()` 用于创建新的图表窗口,是绘图操作的顶层容器,可控制图表尺寸、分辨率等全局属性,返回`Figure`对象。其核心参数如下: | 参数 | 类型 | 作用 | 示例值 | |-------------|-----------|----------------------------|------------------| | `figsize` | (float, float) | 图表尺寸(宽, 高)英寸 | (8, 4) | | `dpi` | int | 分辨率(每英寸像素数) | 300 | | `facecolor` | str | 图表背景颜色 | '#F0F0F0' | | `edgecolor` | str | 图表边框颜色 | 'darkblue' | | `num` | int/str | 图表编号或名称 | 'Figure2' | --- #### 二、基础用法示例 ```python import matplotlib.pyplot as plt import numpy as np # 创建基础图表 fig = plt.figure() # 不传参时使用默认配置 x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) plt.plot(x, y, 'g--', label='sin曲线') plt.title("基本图表演示", fontsize=12) plt.legend() plt.show() ``` [^2][^3] --- #### 三、高级参数设置 ```python # 创建自定义属性的图表 plt.figure( figsize=(10, 5), # 宽10英寸,高5英寸 dpi=120, # 提高分辨率 facecolor='#F5F5F5', edgecolor='teal', linewidth=3, # 边框线宽 num='CustomFigure' ) x = [1,2,3,4,5] y1 = [1,4,9,16,25] y2 = [1,2,3,4,5] # 绘制双曲线 plt.plot(x, y1, 'ro-', label='平方曲线') plt.plot(x, y2, 'b^--', label='线性曲线') plt.xlabel("X轴"), plt.ylabel("Y轴") plt.grid(linestyle=':') plt.legend() plt.show() ``` [^4] --- #### 四、多子图场景 ```python # 创建包含子图的图表 fig = plt.figure(figsize=(12, 6)) # 添加2x1布局的子图 ax1 = fig.add_subplot(211) # 2行1列第1个 ax1.plot(np.random.rand(10), 'tab:blue') ax1.set_title('随机数序列') ax2 = fig.add_subplot(212) # 2行1列第2个 ax2.scatter(range(10), np.random.rand(10)*10, c='red') ax2.set_title('散点分布') plt.tight_layout() # 自动调整子图间距 plt.savefig('multi_subplot.png', dpi=150) # 保存图表[^4] plt.show() ``` --- #### 五、关键注意事项 1. **对象管理**:在Jupyter中建议显式创建`fig`对象,避免自动引用问题 ```python fig = plt.figure() ax = fig.add_subplot(111) ax.plot(...) ``` 2. **DPI与输出**:打印出版物建议dpi≥300,屏幕显示72-150即可[^4] 3. **坐标轴控制**:可通过`fig.axes`获取所有子图对象 ```python for ax in fig.axes: ax.set_xlim(0, 10) ``` --- ### 相关问题 1. 如何在同一代码中管理多个Figure对象? 2. `plt.figure()`与`plt.subplots()`有何区别? 3. 如何批量修改已创建图表的属性? 4. 高分辨率输出时需要注意哪些设置?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值