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

Python - Rearrange Order of Labels in Pie Chart

我正在尝试做一些非常简单的事情,但我是新手 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()

此代码生成一个饼图,但图例中的标签与图表上的标签不匹配。我已经确定这是由于 'Category' 的值在数据中出现的顺序与我定义 "sizes".

的行中值的顺序不同

有谁知道如何同步大小和标签以便在饼图上显示适当的标签?

如有任何帮助,我们将不胜感激!谢谢!

您可以使用 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()