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