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

如何去除Matplotlib散点图中方形标记的圆角边缘?

关于Matplotlib散点图方形标记圆角的问题

先贴出你用到的代码:

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(3,2),dpi=1000)
i = np.arange(1,100)
x = i * 3.1426 / np.max(i)
y = np.sin(x)
s = 1/i
print(s)
plt.scatter(x/10,y, marker='s', s=s)
plt.show()

你观察到的方形标记带圆角、小尺寸近似圆形的情况,确实是Matplotlib的默认预期效果。原因是Matplotlib为了让小标记在视觉上更平滑,默认会对标记应用抗锯齿处理,同时给方形这类带直角的标记添加轻微的圆角——当标记尺寸极小的时候,这个圆角的占比会变得很大,看起来就像圆形了。

想要让所有尺寸的标记都变成真正的无圆角方形,有两个实用的解决办法:

方法一:关闭标记的抗锯齿

这是最简单直接的方案,只需要在scatter()函数里添加antialiased=False参数,强制关闭标记的抗锯齿效果,就能让方形标记保持锐利的直角,哪怕尺寸很小也不会出现圆角。修改后的代码如下:

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(3,2),dpi=1000)
i = np.arange(1,100)
x = i * 3.1426 / np.max(i)
y = np.sin(x)
s = 1/i
print(s)
plt.scatter(x/10,y, marker='s', s=s, antialiased=False)
plt.show()

方法二:自定义无圆角的方形标记

如果关闭抗锯齿后还是达不到你想要的效果,还可以用matplotlib.path.Path完全自定义一个没有任何圆角的方形标记,确保无论尺寸大小都严格保持直角形状:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path

# 定义无圆角方形的顶点坐标和路径指令
square_verts = [
    (0.5, 0.5),   # 右上角
    (-0.5, 0.5),  # 左上角
    (-0.5, -0.5), # 左下角
    (0.5, -0.5),  # 右下角
    (0.5, 0.5),   # 回到起点闭合路径
]
square_codes = [
    Path.MOVETO,   # 移动到第一个顶点
    Path.LINETO,   # 画线到下一个顶点
    Path.LINETO,
    Path.LINETO,
    Path.CLOSEPOLY,# 闭合路径
]
# 创建自定义标记路径
square_path = Path(square_verts, square_codes)

plt.figure(figsize=(3,2),dpi=1000)
i = np.arange(1,100)
x = i * 3.1426 / np.max(i)
y = np.sin(x)
s = 1/i
print(s)
plt.scatter(x/10,y, marker=square_path, s=s)
plt.show()

一般来说第一种方法就足够解决问题了,第二种方法更适合需要高度自定义标记形状的场景。

内容的提问来源于stack exchange,提问作者Soerendip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:19:28