首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在matplotlib pichart图中向图例添加百分比

如何在matplotlib pichart图中向图例添加百分比
EN

Stack Overflow用户
提问于 2021-05-12 01:11:41
回答 2查看 1.3K关注 0票数 0

我正在创建一个简单的脚本,它读取CSV文件列,创建一个包含类别的新列,然后生成一个片段。目前,分段有百分之连接到每个楔子。

如何将百分比移动到图例中?

是否有一种将autopct='%1.1f%%' 参数移动到图例的方法?

下面是显示当前pi图输出的图像:

下面是我的python代码和示例数据。

代码语言:javascript
运行
复制
import pandas as pd
import matplotlib.pyplot as plt
import os

# Setup file paths
file_name = "Software.csv"
dirname = os.getcwd()
file_path = os.getcwd() + "\\" + file_name
df = pd.read_csv(file_path)

# Name output file
split_path = file_path[:-4]
output_file = split_path + "_output.csv"

def check_lines(x):
    if 'Microsoft' in x:
        return 'Microsoft'
    elif 'Google' in x:
        return 'Google'
    elif 'Adobe' in x:
        return 'Adobe'
    elif 'Mozilla' in x:
        return 'Mozilla'
    elif 'Apple' in x:
        return 'Apple'
    elif 'Amazon' in x:
        return 'Amazon'
    else:
        return 'Other'

# Create a new column series; Apply the function to it.
df['Category'] = df['Title'].apply(check_lines)

# Create output file
df.to_csv(output_file)

# -- Pi Chart Version 2 -- 
df2 = pd.read_csv(output_file)
df2val = df2.value_counts('Category')

# Create PI Chart
plot = df2val.plot.pie(y='Category', autopct='%1.1f%%', labeldistance=None, startangle=0)
plt.ylabel('')
plt.legend(title="Categories", bbox_to_anchor=(1.05,0.5), loc="center right", fontsize=10, bbox_transform=plt.gcf().transFigure)

# Save Pi Chart
plt.savefig(split_path + "_chart.png", bbox_inches="tight")
plt.show()

样本数据:

代码语言:javascript
运行
复制
Title
Amazon Chime
Mozilla Firefox
Adobe Photoshop
Adobe Photoshop
Adobe Photoshop
Adobe Photoshop
Adobe Reader
Adobe Reader
Adobe Reader
Adobe Reader
Adobe Reader
Adobe Reader
Adobe Reader
Apple Safari
Apple Safari
Apple Safari
Google Drive
Microsoft Word
Microsoft OneDrive
Wireshark
Notepad
Notepad
Notepad
7zip
7zip
7zip
7zip
7zip
Adobe InDesign
Adobe InDesign
Adobe InDesign
Adobe InDesign
Adobe InDesign
Adobe InDesign
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe InDesign
Adobe InDesign
Adobe InDesign
Adobe InDesign
Adobe InDesign
Adobe InDesign
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
Adobe Bridge
EN

回答 2

Stack Overflow用户

发布于 2021-05-12 01:52:35

您可以按以下方式计算百分比并将它们添加到图例中:

代码语言:javascript
运行
复制
plot = df2val.plot.pie(y='Category',  startangle=0)
plt.ylabel('')
percents = df2val.to_numpy() * 100 / df2val.to_numpy().sum()
plt.legend( bbox_to_anchor=(1.35,1.1), loc='upper right',
            labels=['%s, %1.1f %%' % (l, s) for l, s in zip(df2val.index,percents)])

票数 2
EN

Stack Overflow用户

发布于 2021-05-12 02:06:50

您可以以字符串格式存储df2的索引和值,并将其用作plt.legend() labels参数(例如,在名为图例的变量中分配标签,稍后再使用)。

代码语言:javascript
运行
复制
df2.plot.pie(labeldistance=None)
plt.ylabel('')

legend = ['{} ({:.2%})'.format(idx, value) for idx, value in zip(df2.index, df2.values)]
plt.legend(legend, title="Categories", bbox_to_anchor=(1.05,0.5), loc="center right", fontsize=10, bbox_transform=plt.gcf().transFigure)

plt.show()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67496127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档