如何用Matplotlib实现含局部放大子图的Gridspec布局?
解决Matplotlib子图局部放大问题
要实现第二个子图的局部放大效果,核心是聚焦两个函数的交集区域,调整子图的轴范围和刻度。以下是修改后的完整代码:
import matplotlib.pyplot as plt def plot_graph(): x = list(range(0,1000)) y1 = [10*a-4 for a in x] y2 = [a**2 for a in x] # 主图 plt.subplot2grid((2,2), (0,0)) plt.plot(x, y1, "r-", label="y=10x-4") plt.plot(x, y2, "g-", label="y=x²") plt.xticks(list(range(0,120,20)), labels=[0,200,400,600,800,1000]) plt.xlim(0,100) plt.yticks([1,100,1000,10000,100000]) plt.ylim(1,100000) plt.grid(True) plt.legend(loc="lower right") plt.yscale('log') plt.xlabel('X') plt.ylabel('Y') plt.title('Functions:') # 局部放大子图(交集区域) plt.subplot2grid((2,2), (0,1)) plt.plot(x, y1, "r-") plt.plot(x, y2, "g-") # 设置聚焦交集区域的轴范围 plt.xlim(0, 10) plt.ylim(1, 100) # 调整局部区域的刻度 plt.xticks(list(range(0, 11, 2))) plt.yticks([1, 10, 100]) plt.grid(True) plt.yscale('log') plt.xlabel('X') plt.ylabel('Y') plt.title('Intersection:') plot_graph() plt.tight_layout() # 自动调整子图间距,避免标题/标签重叠 plt.show()
关键修改说明:
- 移除冗余绘图代码:删除了每个子图开头重复的
plt.plot(x,y1,y2),保留单独绘制两条曲线的语句,避免重复渲染。 - 聚焦交集区域:通过
xlim(0, 10)和ylim(1, 100)将子图视野锁定在两个函数的交点附近(解方程可得交点x≈0.417和9.583)。 - 适配局部刻度:为放大子图设置了更贴合局部区域的刻度,让细节显示更清晰。
- 优化布局:添加
plt.tight_layout()自动调整子图间距,避免标题、标签互相遮挡。
内容的提问来源于stack exchange,提问作者Maria_
相关产品推荐
相关产品推荐

