Matplotlib散点图标记尺寸参数疑问:为何markersize报错?
Matplotlib scatter 函数参数命名不一致问题解答
问题场景
运行以下Matplotlib代码时出现报错:
fig, ax = plt.subplots(1, 1, figsize = (6,3)) N = 100 mu = [4,3] cov = [[0.25,0.50],[0.50, 2.50]] rng = np.random.default_rng(seed = 1949) draw = partial(pm.draw, random_seed = rng) x_draws = draw(pm.MvNormal.dist(mu = mu, cov = cov), draws = N) ax.scatter(x_draws[:, 0], x_draws[:, 1], color = "darkblue", markersize = 5, alpha = 1) plt.show()
报错信息:
PathCollection.set() got an unexpected keyword argument 'markersize'
发现scatter函数中颜色参数可以用c=或color=,但标记尺寸必须用s=而非markersize=,疑问:这是否存在不一致?能否用其他命名替代s=?
解答
- 参数命名不一致的原因
Matplotlib不同绘图函数的参数命名存在历史遗留差异:
plot函数(绘制线+标记)使用markersize(或缩写ms)控制标记大小;scatter是专门的散点绘制函数,它的标记大小参数是s,这个参数控制的是标记的面积(而markersize控制的是标记直径),两者数值对应关系为:s = markersize ** 2 * (dpi/72) ** 2;- 颜色参数
c和color的兼容是因为Matplotlib为易用性给很多视觉属性参数提供了短/长命名别名,比如color还有fc(facecolor)这类别名,但s没有官方别名。
- 能否用其他命名替代
s=
目前Matplotlib官方没有为s提供markersize这类别名,必须使用s=指定散点标记大小。如果习惯markersize的写法,可以自行转换:把目标markersize值平方后代入s,比如s=5**2就能得到和plot里markersize=5视觉接近的大小。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

