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

Matplotlib绘制散点图时添加的Circle补丁未正常生效是什么原因?

问题描述

预期效果示意图
我期望散点图能呈现上述效果,但是实际渲染结果如下:
实际渲染结果图

我使用的代码如下:

# Data
import matplotlib.patches as patches
df1=pd.DataFrame({'x_pos': x, 'y_pos': y })
print(df1)

 
# Plot
fig1 = plt.figure(figsize=(20,10))
ax1 = fig1.add_subplot(111)
ax1.plot( 'x_pos', 'y_pos', data=df1, linestyle='none', marker='o')

 
# Annotation
ax1.add_patch(
patches.Circle(
(35, 40),          
3,                
alpha=0.3, facecolor="green", edgecolor="black", linewidth=1, linestyle='solid'
)
)

# Show the graph
plt.show()

用到的数据集如下:

x_pos  y_pos
0       38  62506
3       33  64991
4       32  50825
5       44  57568
7       38  59365
..     ...    ...
301     44  55140
302     38  58062
303     48  59728
307     39  48513
310     43  45046

请问我代码中哪里存在错误,导致补丁未正常生效?


解答

错误出在圆形补丁的坐标和半径参数和实际数据量级不匹配:

  • 你数据集的y_pos数值范围是45000~65000,但你给圆形设置的圆心y坐标是40,半径只有3,这个补丁实际落在y轴接近0的位置,不在散点的可视范围内,自然看不到。

直接调整圆形的参数即可解决,比如你要圈出x约35、y约48000位置的散点,参数修改为:

ax1.add_patch(
patches.Circle(
(35, 48000),          # 圆心y值和你要标注的散点y值对齐
2000,                 # 半径同步匹配y轴的量级,保证能覆盖目标散点
alpha=0.3, facecolor="green", edgecolor="black", linewidth=1, linestyle='solid'
)
)

如果你不想受数据范围影响,也可以用轴相对坐标绘制补丁:

ax1.add_patch(
patches.Circle(
(0.2, 0.1), # 坐标范围为0~1,对应轴的左下角到右上角
0.05, 
transform=ax1.transAxes, # 启用相对坐标变换
alpha=0.3, facecolor="green", edgecolor="black", linewidth=1, linestyle='solid'
)
)

内容的提问来源于stack exchange,提问作者Sithija Piyuman Thewa Hettige

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:06:00