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