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

Python绘制饼图:自动对齐、关联图例、隐藏扇区标签实现方法

matplotlib 饼图三类问题解决方案

针对你提出的三个饼图绘制问题,直接按以下逻辑修改即可,无需手动反复调试参数:

  • 扇区自动水平对齐:不需要反复试startangle数值,两个分类场景下可通过占比自动计算角度值,公式固定,适配任意两分类占比。
  • 图例自动关联:不要手动硬编码标签列表,直接绑定pandas序列的索引作为标签源,和传入饼图的数值顺序严格绑定,不会出现错位。
  • 隐藏扇区分类文本:扇区上的分类名是labels参数控制的,移除该参数后扇区仅保留autopct生成的百分比文本,分类标签统一放到图例中展示即可。

修正后可直接运行的代码

已修复原代码里的中文引号、参数类型错误、画布边距溢出问题:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 对应你给出的占比数据
my_df = pd.Series([40, 60], index=['Male', 'Female'])

explode = [0.2, 0.02]
fig = plt.figure(figsize=(10, 5), facecolor='White')
ax = fig.add_axes((0.1, 0.1, 0.8, 0.8))
colors = sns.color_palette('bright')

# 自动计算水平对齐需要的startangle,无需手动调试
auto_startangle = 90 - (360 * my_df.iloc[0] / my_df.sum()) / 2

# 绘制饼图,不传入labels参数,避免分类名直接显示在扇区上
wedges, _, autotexts = ax.pie(
        my_df,
        colors=colors,
        autopct='%0.0f%%',
        explode=explode,
        shadow=True,
        startangle=auto_startangle,
        textprops={'color': 'Black','fontsize':16},
        wedgeprops={'linewidth': 6},
        center=(0.1,0.1),
        rotatelabels=True
)

ax.set_title('aaa', fontsize=16)
# 绑定扇区对象和序列索引,自动生成匹配的图例
ax.legend(wedges, my_df.index, title='asd', loc=1)
plt.show()

关键逻辑说明

  1. 自动对齐角度计算逻辑:startangle的默认起始参考为x轴正方向,要让两个扇区的分割线保持水平,只需让第一个扇区的中心对准y轴正方向,代入公式即可算出准确角度,适配任意两分类占比场景。
  2. 图例绑定逻辑:ax.pie()返回的第一个对象是所有扇区的实体列表,将其和pandas序列的索引(即分类名)按顺序传入ax.legend(),标签和扇区永远一一对应,不会因为手动改列表顺序出现错位。
  3. 扇区文本控制逻辑:ax.pie()返回的第二个元素是labels参数生成的分类文本对象,第三个是autopct生成的百分比文本对象。只要不传入labels参数,扇区上就不会显示分类名,仅保留百分比文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:15:43