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

