局部放大图的绘制(Python实现)

目录

简介:

2 绘制局部放大图的主要步骤

2.1 数据准备

2.2 主图绘制

2.2 局部图绘制

2.3 设置放大区间(目视范围)

2.4 建立母图和子图连接关系

3 结果展示

4 代码总汇 


简介:

       在复杂的数据分析与科学研究领域,制作局部放大图是一种不可或缺的可视化策略,它在增强数据表达的精确性与深度上扮演着至关重要的角色。面对海量数据点或纷繁复杂的数据结构时,全局视图往往难以细致入微地展现所有关键信息,特别是那些藏匿于庞大背景之下的细微变化与独特特征。通过精心选取并放大数据的特定部分,我们能够突破宏观层面的局限,直接突显出这些精细的结构与模式,使得原本隐匿不显的细节跃然眼前,极大地提升了信息的可察觉性。

2 绘制局部放大图的主要步骤:

2.1 数据准备:

x = np.arange(0.1,30,0.2)
y1 =np.sin(x)*100/x
y2=np.sin(x*x)

2.2 主图绘制:

ax.plot(x, y1, color='g', linestyle=':', linewidth=2,marker='o', markersize=3,
        markeredgecolor='green', markerfacecolor='C2')
ax.plot(x, y2, color='r', linestyle=':', linewidth=2,marker='o', markersize=3,
        markeredgecolor='red', markerfacecolor='C3')

2.2 局部图绘制:

axins = ax.inset_axes((0.45, 0.5, 0.4, 0.3))#0.45,0.5是比例原图的这里可以调整发大图的位置
#在子坐标系中绘制原始数据
axins.plot(x, y1, color='g', linestyle=':', linewidth=2,marker='o', markersize=3,
            markeredgecolor='green', markerfacecolor='C2')

axins.plot(x, y2, color='r', linestyle=':', linewidth=1,marker='o', markersize=3,
            markeredgecolor='red', markerfacecolor='C3')

2.3 设置放大区间(目视范围):

axins.set_xlim(22, 24)
axins.set_ylim(-6,6)

2.4 建立母图和子图连接关系:

axins.set_xlim(22, 24)
axins.set_ylim(-6,6)

3 结果展示

4 代码总汇 

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import mark_inset

#数据准备
x = np.arange(0.1,30,0.2)
y1 =np.sin(x)*100/x
y2=np.sin(x*x)

#绘图
fig, ax = plt.subplots(1, 1, figsize=(8, 6))
ax.tick_params(axis="both", which="major", direction="in", width=2, length=5)
plt.style.use('seaborn-white')  # 设置背景风格
plt.tick_params(labelsize=13)  # 设置坐标轴刻度字字体大小
plt.xlabel('X', fontsize=18)  # 设置x轴标题及字体大小
plt.ylabel('Y', fontsize=18)  # 设置y轴标题及字体大小
ax.plot(x, y1, color='g', linestyle=':', linewidth=2,marker='o', markersize=3,
        markeredgecolor='green', markerfacecolor='C2')
ax.plot(x, y2, color='r', linestyle=':', linewidth=2,marker='o', markersize=3,
        markeredgecolor='red', markerfacecolor='C3')
plt.legend(["y1","y2"], ncol=3,loc='upper right',fontsize=16)#绘制图样样例
#更改框架
# ax.spines['bottom'].set_linestyle('dashed')#变为虚线
ax.spines['bottom'].set_linewidth(2)#改变线条
ax.spines['left'].set_linewidth(2)#改变线条
# # 隐藏绘图框架
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
# 将左侧脊柱的起始位置设置为(-1, -1)
# ax.spines['left'].set_bounds(-1, -1)
#更改框架颜色
ax.spines['bottom'].set_edgecolor('black')
ax.spines['left'].set_edgecolor('black')

#嵌入绘制局部放大图的坐标系
axins = ax.inset_axes((0.45, 0.5, 0.4, 0.3))#0.45,0.5是比例原图的这里可以调整发大图的位置
#在子坐标系中绘制原始数据
axins.plot(x, y1, color='g', linestyle=':', linewidth=2,marker='o', markersize=3,
            markeredgecolor='green', markerfacecolor='C2')

axins.plot(x, y2, color='r', linestyle=':', linewidth=1,marker='o', markersize=3,
            markeredgecolor='red', markerfacecolor='C3')
axins.tick_params(axis="both", which="major", direction="in", width=2, length=5,color='lightgreen')#设置主刻度线
# axins.tick_params(axis="both", which="minor", direction="in", width=2, length=5)
axins.spines['bottom'].set_edgecolor('lightgreen')
axins.spines['left'].set_edgecolor('lightgreen')
axins.spines['top'].set_edgecolor('lightgreen')
axins.spines['right'].set_edgecolor('lightgreen')
#设置放大区间
#调整子坐标系的显示范围自己根据图像调整即可
axins.set_xlim(22, 24)
axins.set_ylim(-6,6)

#建立父坐标系与子坐标系的连接线
#loc1 loc2: 坐标系的四个角
#1 (右上) 2 (左上) 3(左下) 4(右下)
mark_inset(ax, axins, loc1=3, loc2=4, fc="none", ec='lightgreen', lw=2,linestyle=':')
#显示
plt.show()

参考文献:Matplotlib 局部放大图画法 | 码农家园 

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现Python局部细节放大,可以使用OpenCV库。以下是一种实现方法: 1. 导入必要的库和模块,例如cv2和sys。 2. 读取像并判断是否成功读取。 3. 指定需要放大的部分区域,可以通过裁剪像来选择感兴趣的区域。 4. 使用双线性插值法将选定的部分区域进行放大,可以使用cv2.resize函数实现。设置放大后的大小和插值方式。 5. 将放大后的结果放置在像的指定位置,可以通过赋值操作来实现。 6. 可选:为放大的部分区域绘制边框和连线,以突出显示。 7. 展示最终的结果像。 下面是实现局部细节放大Python代码示例: import cv2 as cv import sys if __name__ == '__main__': # 读取像并判断是否读取成功 img = cv.imread('tu.jpg') if img is None: print('Failed to read picture') sys.exit() # 需要放大的部分区域 part = img[300:400, 250:350] # 双线性插值法放大部分区域 mask = cv.resize(part, (300, 300), fx=0, fy=0, interpolation=cv.INTER_LINEAR) # 放大局部的位置 img[110:410, 570:870] = mask # 画框并连线 cv.rectangle(img, (250, 300), (350, 400), (0, 255, 0), 1) img = cv.line(img, (350, 300), (570, 110), (0, 255, 0)) img = cv.line(img, (350, 400), (570, 410), (0, 255, 0)) # 展示结果 cv.imshow('img', img) cv.waitKey(0) cv.destroyAllWindows() 注意:在代码中,你需要将'tu.jpg'替换为你实际使用的像文件路径。此代码将选定的部分区域放大,并将结果放置在像的指定位置。你还可以根据需要调整参数来获得更好的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [科研作-局部放大效果的python实现](https://blog.csdn.net/zzu_zhong/article/details/131312317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [python放大局部像(画中画形式展示)](https://blog.csdn.net/qq_33687272/article/details/121363358)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值