python数据可视化玩转Matplotlib subplot子图操作,四个子图(一包四),三个子图,子图拉伸

目录

一、创建子图

1.1 下图是绘制的子图:

1.2 代码释义:

二、绘制子图

2.1 代码引入

2.2 图形绘制

三、子图布局

3.1 子图布局说明

四、子图大小

4.1 子图大小调整

五、子图间距

5.1 子图代码调整

六、子图位置

6.1 代码引入

6.2 完整代码

6.3 完整代码

总结




大锤爱编程的博客_CSDN博客-大数据,Go,数据分析领域博主

Matplotlib是一个流行的Python可视化库,它提供了许多功能来创建各种类型的图表。其中一个功能是子图,它允许您在单个图表中绘制多个图。

一、创建子图

要创建子图,请使用plt.subplots()函数。该函数接受三个参数:行数、列数和子图编号。以下是一个简单的示例:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)

这将创建一个2x2的网格,其中包含4个子图。每个子图都有一个唯一的编号,可以在axs数组中访问。例如,要访问第一个子图,请使用axs[0, 0]

以下是一个示例代码,用于绘制2x2网格,其中每个子图都随机放置一个图形:

import matplotlib.pyplot as plt
import numpy as np

# 创建一个2x2的网格
fig, axs = plt.subplots(2, 2)

# 在每个子图中绘制一个图形
for ax in axs.flat:
    # 随机生成一些数据
    x = np.random.rand(100)
    y = np.random.rand(100)
    # 绘制散点图
    ax.scatter(x, y)

# 显示图形
plt.show()

1.1 下图是绘制的子图:

1.2 代码释义:

注释:

  • 导入必要的库:我们需要使用matplotlib和numpy库来生成散点图和随机数。
  • 创建一个2x2的网格:我们使用subplot()函数创建一个2x2的子图,该函数返回一个Figure对象fig和一个Axes对象数组axs,它包含四个子图,第一个参数2表示行数,第二个参数2表示列数。
  • 在每个子图中绘制一个图形:我们使用for循环遍历每个子图对象,对每个子图生成随机数据,使用scatter()函数在子图中绘制散点图。使用a
### OpenCV与NumPy实现直方均衡化 在Python中,可以通过OpenCV库轻松实现像的直方均衡化。该方法能够有效提升像对比度,尤其是在处理低对比度或光照不均的场景时表现优异[^3]。 以下是基于OpenCV和NumPy的具体实现方式: #### 使用OpenCV内置函数`cv2.equalizeHist` ```python import cv2 import numpy as np from matplotlib import pyplot as plt # 加载灰度像 img = cv2.imread('image_path.jpg', cv2.IMREAD_GRAYSCALE) # 应用直方均衡化 equ = cv2.equalizeHist(img) # 显示原与均衡化后的像 plt.subplot(1, 2, 1), plt.title("Original Image"), plt.imshow(img, cmap='gray') plt.subplot(1, 2, 2), plt.title("Equalized Image"), plt.imshow(equ, cmap='gray') plt.show() ``` 上述代码利用了OpenCV提供的高效API `equalizeHist()` 来完成直方均衡化操作[^4]。 --- #### 自定义实现直方均衡化逻辑 如果希望深入了解其实现细节,也可以手动编写代码模拟这一过程。具体步骤如下所示: ```python def manual_histogram_equalization(image): # 计算像素频率分布 hist, bins = np.histogram(image.flatten(), 256, [0, 256]) # 归一化累积分布函数 CDF (Cumulative Distribution Function) cdf = hist.cumsum() cdf_normalized = cdf * hist.max() / cdf[-1] # 创建映射表用于更新像素值 lookup_table = np.interp(np.arange(0, 256), bins[:-1], cdf_normalized).astype(np.uint8) # 返回均衡化后的像 return lookup_table[image] # 调用自定义函数 manual_equ = manual_histogram_equalization(img) # 展示结果 plt.figure(figsize=(10, 5)) plt.subplot(1, 3, 1), plt.title("Original Image"), plt.imshow(img, cmap='gray') plt.subplot(1, 3, 2), plt.title("Manual Equalized Image"), plt.imshow(manual_equ, cmap='gray') plt.subplot(1, 3, 3), plt.title("Built-in Equalized Image"), plt.imshow(equ, cmap='gray') plt.tight_layout() plt.show() ``` 此部分展示了如何通过计算累计概率密度函数(CDF),再将其线性拉至整个强度范围来达到均衡化的效果。 --- #### 结合Matplotlib绘制直方比较 为了直观感受直方的变化情况,还可以借助Matplotlib工具包进一步可视化数据差异: ```python hist_original = cv2.calcHist([img], [0], None, [256], [0, 256]) hist_equalized = cv2.calcHist([equ], [0], None, [256], [0, 256]) plt.figure(figsize=(10, 5)) # 原始像直方 plt.subplot(1, 2, 1), plt.title("Original Histogram") plt.bar(range(256), hist_original[:, 0], width=1.0, color="blue") # 均衡化后像直方 plt.subplot(1, 2, 2), plt.title("Equalized Histogram") plt.bar(range(256), hist_equalized[:, 0], width=1.0, color="green") plt.tight_layout() plt.show() ``` 以上脚本不仅实现了直方均衡化功能,还提供了清晰的数据呈现手段以便观察前后变化趋势[^2]。 ---
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大锤爱编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值