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
相关产品推荐
相关产品推荐

