Python-饼图中标签的重新排列顺序

问题描述 投票:0回答:1

我正在尝试做一些非常简单的事情,但是我是Python新手,所以这对我来说有点困难。我正在尝试制作饼图,并且图表的标签出现在错误的饼图中。

这是我的代码:

import matplotlib.pyplot as plt

# Data to plot
labels = data['Category'].unique()
sizes = (data['Category'].value_counts()/data['Category'].value_counts().sum())*100

# Plot
plt.pie(sizes, labels=labels,
autopct='%1.1f%%', shadow=True, startangle=140)

plt.axis('equal')
plt.legend(labels, loc="best")
plt.tight_layout()

plt.show()

此代码生成饼图,但是图例中的标签与图表上的标签不匹配。我已经确定这是由于“类别”值在数据中出现的顺序与我定义“尺寸”的行中的值顺序不同。

有人知道如何同步尺寸和标签,以便在饼图上显示适当的标签吗?

任何帮助将不胜感激!谢谢!

matplotlib label pie-chart
1个回答
1
投票

您可以使用labels = sizes.index,因此两者的顺序相同。如果要对标签进行排序,可以先调用sizes = sizes.sort_index()。或者,按值对它们进行排序:sizes = sizes.sort_values()。默认情况下,它们将按出现顺序排序。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

data = pd.DataFrame({'Category': np.random.choice(list('abcdefghij'), 500)})
sizes = data['Category'].value_counts().sort_index() / data['Category'].value_counts().sum() * 100
plt.pie(sizes, labels=sizes.index,
        autopct='%1.1f%%', shadow=True, startangle=140)
plt.axis('equal')
plt.legend(sizes.index, loc="best")
plt.tight_layout()
plt.show()

example plot

© www.soinside.com 2019 - 2024. All rights reserved.