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

使用Matplotlib绘制环形饼图时内外圆环未居中的问题求助

解决Matplotlib环形饼图内外圈偏离中心的问题

看起来你遇到的问题大概率是因为没设置绘图轴的等比例显示,或是添加中心圆的方式不对。咱们一步步来修正你的代码:

1. 先获取饼图的轴对象

用pandas的plot.pie()时,最好显式拿到对应的Axes对象,后续操作会更可控:

import matplotlib.pyplot as plt
import pandas as pd

# 假设你的df、colors、explode已经定义完成
ax = df.STATUS.value_counts(sort=True).plot.pie(
    colors=colors,
    center=(0, 0),
    explode=explode,
    autopct='%1.1f%%',
    pctdistance=0.85
)

2. 设置轴为等比例显示

这是关键!如果轴的长宽比不是1:1,饼图会变成椭圆,视觉上就会显得偏离中心:

ax.set_aspect('equal')

3. 正确添加中心黑色圆

要把圆添加到刚才获取的ax轴上,同时可以调整圆的半径(你原来的0.95偏大,会覆盖过多饼图区域,建议改成0.7左右,可按需调整):

center_circle = plt.Circle((0, 0), 0.7, fc='black')
ax.add_artist(center_circle)

4. 可选:优化显示效果

环形饼图通常不需要坐标轴,你可以隐藏刻度和默认标签:

ax.set_xticks([])
ax.set_yticks([])
ax.set_ylabel('')  # 去掉默认的y轴标签

完整修正后的代码示例

import matplotlib.pyplot as plt
import pandas as pd

# 模拟测试数据(替换成你自己的df即可)
df = pd.DataFrame({'STATUS': ['A', 'A', 'B', 'B', 'B', 'C']})
colors = ['#ff9999','#66b3ff','#99ff99']
explode = (0.05, 0.05, 0.05)

# 绘制饼图并获取轴对象
ax = df.STATUS.value_counts(sort=True).plot.pie(
    colors=colors,
    center=(0, 0),
    explode=explode,
    autopct='%1.1f%%',
    pctdistance=0.85
)

# 设置等比例轴,确保饼图为正圆形
ax.set_aspect('equal')

# 添加中心黑色圆
center_circle = plt.Circle((0, 0), 0.7, fc='black')
ax.add_artist(center_circle)

# 隐藏坐标轴优化显示
ax.set_xticks([])
ax.set_yticks([])
ax.set_ylabel('')

plt.show()

问题根源说明

  • 未设置ax.set_aspect('equal'):Matplotlib默认轴的长宽比不一定是1:1,会导致饼图变形,看起来像偏离中心。
  • 中心圆添加对象错误:如果直接用默认轴添加圆,可能和pandas绘图生成的轴不是同一个,导致位置错位。

调整后你的环形饼图内外圈就能完美对齐中心啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:12:52