【matplotlib笔记】plt.subplot()绘制子图

绘制子图

面向过程的方式绘图

如何绘制如下的图呢?

  • 上半部分:看做2行2列,第1行第1列、第1行第2列分别放一张图
  • 下半部分:看做2行1列,第2行的1列放一张图
  • 通过plt.subplot()绘制子图
    plt.subplot(2,1,1) 形成2行2列的布局,画在第1个位置;
    plt.subplot(211) 两种写法效果完全相同。

在这里插入图片描述

# 绘制子图
import matplotlib.pyplot as plt
import numpy as np

x1 = np.linspace(0.0,5.0) # 从0.0到5.0,选取50个数字(默认)
x2 = np.linspace(0.0,2.0)
x3 = np.linspace(0.0,10.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1) # y1 = cos(2*PI*x1)*e^-x1
y2 = np.cos(2 * np.pi * x2) # y2 = cos(2*PI*x2)
y3 = x3*x3 + 2 # y3 = x3^2 + 2

plt.subplot(2, 2, 1)   # 2行2列,画在第1个位置;
# plt.subplot(221) 效果完全一样
plt.plot(x1, y1, 'o-') # 绘制效果由 圈 和 线 组成
plt.title('A title of 2 subplots')
plt.ylabel('Damped oscillation')

plt.subplot(2, 2, 2)   # 2行2列,画在第2个位置
plt.plot(x2, y2, '.-') # 绘制效果由 点 和 线组成
plt.xlabel('time(s)')
plt.ylabel('Undamped')

plt.subplot(2, 1, 2)   # 2行1列,画在第2个位置
plt.plot(x3, x3, '^-') # 绘制效果
plt.xlabel('x3data')   # x轴标签
plt.ylabel('y3data')   # y轴标签
plt.show()

面向对象的方式绘图

  • 看做2行2列,总共四张图,分别放在对应位置

在这里插入图片描述

# 面向对象方式绘制子图
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1)
data = np.random.randn(2, 100)

fig, axs = plt.subplots(2, 2, figsize=(5, 5)) # 绘制2行2列
axs[0, 0].hist(data[0])
axs[1, 0].scatter(data[0], data[1])
axs[0, 1].plot(data[0], data[1])
axs[1, 1].hist2d(data[0], data[1])

fig.subplots_adjust(hspace=0.8) # 子图的垂直间隔

plt.show()

绘制多个子图

  • 通过plt.figure()指定某张图
  • 通过plt.subplot()在指定的图上绘制子图
    在这里插入图片描述
# 绘制多个子图
import matplotlib.pyplot as plt

plt.figure(1)     # 第一张图
plt.subplot(211)  # 第一张图中的第一张子图
plt.plot([1,2,3])
plt.subplot(212)  # 第一张图中的第二章子图
plt.plot([4,5,6])

plt.figure(2)     # 第二张图
plt.plot([4,5,6]) # 默认创建子图subplot(111)

plt.figure(1)     # 切换到figure1;子图subplot(212)仍然是当前图
plt.subplot(211)  # 令子图subplot(211)成为figure1的当前图
plt.title('Easy as 1,2,3')
plt.show()
``` %matplotlib inline import numpy as np import cv2 #导入OpenCV库,OpenCV是一个功能强大的计算机视觉库,广泛用于像处理、视频分析、机器学习和深度学习等领域 import matplotlib.pyplot as plt from skimage import data image = data.camera() # 使用 skimage 自带的相机像 # 加入高斯噪声,噪声的标准差 noise_std = 25 noise = np.random.normal(0, noise_std, image.shape) # image.shape, 生成的噪声数组将与 image 大小相同,便于直接相加 noisy_image = np.clip(image + noise, 0, 255).astype(np.uint8) #对像添加噪声后进行数值范围的限制和数据类型转换, 无符号8位整数 mean_filtered_image = cv2.blur(noisy_image, (5, 5)) # 应用均值滤波,用滤波核内所有像素的平均值替换中心像素的值 gaussian_filtered_image = cv2.GaussianBlur(noisy_image, (5, 5), 0) # 应用高斯滤波,sigmaX =0控制高斯核在水平方向的权重分布 # 绘制plt.figure(figsize=(15, 5)) # figsize=(width, height)像的大小,单位是英寸 plt.subplot(1, 4, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis('off') # 坐标轴和刻度线会被隐藏,只显示像内容 plt.subplot(1, 4, 2) plt.imshow(noisy_image, cmap='gray') plt.title('Noisy Image') plt.axis('off') plt.subplot(1, 4, 3) plt.imshow(mean_filtered_image, cmap='gray') plt.title('Mean Filtered Image') plt.axis('off') plt.subplot(1, 4, 4) plt.imshow(gaussian_filtered_image, cmap='gray') plt.title('Gaussian Filtered Image') plt.axis('off') plt.show()```解释一下代码
最新发布
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

萌宅鹿同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值