Matplotlib PolarAxes散点图中心点缺失问题的排查与解决
问题原因与解决方案
问题根源
你使用的matplotlib 3.2.2版本存在极坐标绘制的兼容性问题:当径向距离r=0时,标记点会因为底层渲染逻辑的缺陷被隐藏;而当r值大于等于5时,刚好越过了该版本的渲染阈值,所以点能正常显示。
可行解决方案
1. 升级matplotlib版本(推荐)
该bug在matplotlib 3.3及以上版本已被修复,升级后无需修改原有代码即可显示中心点。执行升级命令:
pip install --upgrade matplotlib
2. 替换r=0为极小非零值(无需升级)
将数据中rpos=0的点替换为一个极小的非零值(比如1e-6),既不影响视觉效果,又能绕过旧版本的渲染限制:
import numpy as np # 替换r=0的点为极小值 rpos = np.where(rpos == 0, 1e-6, rpos) # 原有绘制代码不变 figure = plt.figure(figsize=(6, 5)) axes: plt.Axes = figure.add_axes(position, projection="polar") axes.plot( apos, rpos, 'o', markersize=4, markerfacecolor='white', markeredgecolor='darkgrey' )
3. 单独绘制中心点
通过scatter单独绘制(0,0)点,该方法在旧版本极坐标下对r=0的支持更稳定:
figure = plt.figure(figsize=(6, 5)) axes: plt.Axes = figure.add_axes(position, projection="polar") # 绘制除中心点外的所有点 mask = rpos != 0 axes.plot( apos[mask], rpos[mask], 'o', markersize=4, markerfacecolor='white', markeredgecolor='darkgrey' ) # 单独绘制中心点,s对应markersize的平方(保持视觉大小一致) axes.scatter(0, 0, marker='o', s=16, facecolor='white', edgecolor='darkgrey')
内容的提问来源于stack exchange,提问作者Glemi
相关产品推荐
相关产品推荐

