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

Matplotlib嵌入放大子图功能异常,求助解决方法

在Matplotlib中添加指定区域放大子图的问题

我尝试在Matplotlib中为现有图表添加指定区域的放大子图,编写了如下最小可复现代码:

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

#Loading Data
data = pd.read_csv("lol.csv")
data.head()

import matplotlib.pyplot as plt
ypoints = np.array(data['KDA'])
xpoints = np.array(data['Win/Lose'])

from mpl_toolkits.axes_grid1.inset_locator import mark_inset, inset_axes
ax = plt.subplot(1, 1, 1)
ax.scatter(xpoints, ypoints)
ax.set_xlabel("Win/Loss")
ax.set_ylabel("KDA")
axins = ax.inset_axes([0.3, 0.3, 0.47, 0.47])
x1, x2, y1, y2 = 0, 0, -0.5, 6.5
axins.set_xlim(x1, x2)
axins.set_ylim(y1, y2)

ax.indicate_inset_zoom(axins, edgecolor="black")

当前生成的图表效果不符合预期,我希望实现类似示例中的放大嵌入效果,请问该如何解决?


解决方案

你的代码存在几个关键问题,对应修改如下:

  • 错误的放大区域范围
    你设置的x1, x2 = 0, 0会让子图的x轴范围为0到0,相当于没有宽度,这会导致子图无法正常显示放大内容。需要根据实际数据设置合理的x轴范围,比如如果Win/Lose是0和1的二元值,想放大0对应的区域,应该设置x1, x2 = -0.2, 0.2(给点缓冲空间)。

  • 未在子图中绘制数据
    你创建了嵌入子图axins,但没有在这个子图上绘制对应的散点数据,所以子图是空的。需要在axins上重新绘制数据:

    axins.scatter(xpoints, ypoints)
    
  • 使用正确的标记放大区域的方法
    你用了ax.indicate_inset_zoom,但结合mpl_toolkits.axes_grid1.inset_locator的话,更合适的是用mark_inset来标记主图中的放大区域,它能画出连接主图和子图的指示线。

修改后的完整代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import mark_inset, inset_axes

# 加载数据
data = pd.read_csv("lol.csv")
ypoints = np.array(data['KDA'])
xpoints = np.array(data['Win/Lose'])

# 创建主图
ax = plt.subplot(1, 1, 1)
ax.scatter(xpoints, ypoints)
ax.set_xlabel("Win/Loss")
ax.set_ylabel("KDA")

# 创建嵌入子图
axins = ax.inset_axes([0.3, 0.3, 0.47, 0.47])
# 设置合理的放大区域范围,这里假设放大Win/Lose=0的区域,x轴给缓冲
x1, x2, y1, y2 = -0.2, 0.2, -0.5, 6.5
axins.set_xlim(x1, x2)
axins.set_ylim(y1, y2)
# 在子图绘制数据
axins.scatter(xpoints, ypoints)
# 标记主图中的放大区域,连接子图
mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="black")

plt.show()

额外说明:

  • mark_inset的loc1和loc2参数用来设置指示线在子图上的位置,可根据需求调整(比如1=左上,2=右上,3=右下,4=左下)。
  • 如果Win/Lose是其他数值类型,需要对应调整x1和x2的范围,确保包含你想放大的目标区域。

内容的提问来源于stack exchange,提问作者Joyanta J. Mondal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:54:36