You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 23:48:23