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

xzv2uavs  于 2023-05-23  发布在  Python
关注(0)|答案(1)|浏览(261)

我试图做一些非常简单的事情,但我是一个新手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”的行中的值的顺序不同。
有谁知道如何同步大小和标签,以便在饼图上显示适当的标签?
任何帮助将不胜感激!谢谢大家!

ie3xauqp

ie3xauqp1#

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

相关问题