matplotlib创建子图的四种方法

方法一:利用subplot()(推荐)

可以使用Matplotlib中的subplot函数创建子图(即,可以是不同图形按照指定行列数拼成一个图形):

plt.subplot(nrows, ncols, index, **kwargs)
  • nrows:指定子图的行数。
  • ncols:指定子图的列数。
  • index:指定当前子图的位置,从左上角开始,按从左到右、从上到下的顺序编号,范围从 1 到 nrows*ncols。
  • **kwargs:可选参数,用于设置子图的各种属性,比如调整间距、坐标轴等。
    plt.subplot 函数的返回值是一个 Axes 对象,可以通过这个对象来对子图进行各种操作,比如绘制图形、设置标题、坐标轴标签等。

plt.subplot 还支持一种更简洁的用法,可以使用三位整数来同时指定 nrows、ncols 和 index,例如:

plt.subplot(221)

示例1:

import matplotlib.pyplot as plt

# 创建一个 subplot 对象
ax1 = plt.subplot(1, 2, 1)
ax1.bar([1, 2, 3], [3, 4, 5])

ax2 = plt.subplot(2, 2, 2)
ax2.plot([1, 2, 3], [3, 4, 5])


# ax3 = plt.subplot(2, 2,4)
# ax3.plot([1, 2, 3], [3, 4, 5])

ax4 = plt.subplot(2, 4,7)
ax4.plot([1, 2, 3], [3, 4, 5])

ax5 = plt.subplot(2,4,8)
ax5.plot([1, 2, 3], [3, 4, 5])

plt.show()

在这里插入图片描述

示例2:

x=np.linspace(-10,10,30)
y1=p(x)
p2=p.deriv(m=2)    #deriv函数的参数m为2得到其二阶导函数
y2=p2(x)
p3=p.deriv(m=3)    #deriv函数的参数m为3得到其三阶导函数
y3=p3(x)
plt.subplot(221)
'''
该函数第一个参数是子图的行数,第二个参数是子图的列数,第三个参数是一个从1开始的序号。
这3个参数可合成一个数字,如221,表示创建一个2行2列的拼图,这是第1行第1列的图形
'''
plt.plot(x,y1)
plt.title("Polynomial")
plt.subplot(2,2,2); plt.plot(x,y1,'r'); plt.title("First Derivative")
plt.subplot(223); plt.plot(x,y2,'k'); plt.title("Second Derivative")
plt.subplot(224); plt.plot(x,y3,'c'); plt.title("Third Derivative")
plt.subplots_adjust(hspace=0.4,wspace=0.3)
plt.savefig('4145.svg',bbox_inches='tight')
plt.show()

在这里插入图片描述

方法二:利用 subplots()

import matplotlib.pyplot as plt
fig,axes=plt.subplots(2,2,figsize=(5,4),
                     sharex=False,
                     sharey=False)
#创建一个被分割为四个子图的figure对象
#sharex,sharey表示是否公用坐标轴
x=[1,2,3]
y=[8,5,4]
axes[1,1].plot(x,y)
#在第2行第2列的子图上作图
plt.subplots_adjust(wspace=0,hspace=0.1)
#调整子图间的间隙,wspace和hspace分别用于控制间距宽度和高度的百分比
plt.show()

效果如下:
在这里插入图片描述

一个常见错误

subplots作图中subplots(1,n)分配的坐标轴索引是一维的不能用二维方法引用,错例如下:
在这里插入图片描述

正确的做法:
在这里插入图片描述

方法三,利用add_subplot()创建子图

fig.add_subplot 是向当前的Figure 对象 中添加一个新的子图,并返回一个 Axes 对象,可以在这个 Axes 对象上进行绘图操作。常用参数包括:

  • nrows:子图的行数。
  • ncols:子图的列数。
  • index:子图的索引,从左上角开始,从左到右,从上到下依次递增。

示例1:

import matplotlib.pyplot as plt

# 创建一个 Figure 对象
fig = plt.figure()

# 向 Figure 对象中添加一个 2x2 的子图,并获取第一个子图的 Axes 对象
ax1 = fig.add_subplot(2, 2, 1)

# 在第一个子图上绘制柱状图
ax1.bar([1, 2, 3], [3, 4, 5])

# 获取第二个子图的 Axes 对象
ax2 = fig.add_subplot(1, 2, 2)

# 在第二个子图上绘制折线图
ax2.plot([1, 2, 3], [3, 4, 5])


ax3=fig.add_subplot(223)
ax3.bar([1, 2, 3], [3, 4, 5])


plt.show()

在这里插入图片描述

示例2:

import matplotlib.pyplot as plt
fig=plt.figure(num=1,figsize=(5,4),facecolor='gray')
#创建一个figure对象
#num:图标号;
#figsize:图片尺寸;
#facecolor:图片背景

ax=fig.add_subplot(224)
#创建一个图,该图在2行2列的子图中的第4个位置
x=[1,2,3]
y=[8,5,4]
ax.plot(x,y)
plt.show()

效果如下:
在这里插入图片描述
该方法比较灵活,可以做出大子图和小子图的组合,但是要保证add_subplot(XXX)中最小子图的一致。

方法四,利用pandas+plot()直接创建子图

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))

df.plot(style ='--', alpha=0.5, grid=True,subplots = True,layout=(2, 3),figsize=(8,6))
#alpha:线条透明度,0~1透明度逐渐降低
#grid:作图是否显示
#subplots:表示是否分图作图
#layout:图片分割参数
#figsize:图片尺寸
plt.subplots_adjust(wspace=0,hspace=0.2)
#调整子图间的间隙,wspace和hspace分别用于控制间距宽度和高度的百分比
plt.show()

效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值