我使用Pandas包装器counts.plot(kind='pie')
和Matplotlib直接`plt.pie(计数)生成了一个饼图。
问题在于标签。使用饼图正确表示值=饼楔,但是当我开始引入自定义颜色和图例时,标签会关闭。
饼图标签是正确的,但图例标签是根据group_name
中的标签顺序绘制的,而不是它们的值。关于如何解决这个问题的任何想法?
代码=
group_names = ['2-3 km', '3-5 km','5-7 km','7-10 km','10-20 km','20-50 km','50-75 km','75-100 km','>100 km']
df['bins'] = pd.cut(df['distkm'], bins)
df['categories'] = pd.cut(df['distkm'], bins, labels=group_names)
counts = df['categories'].value_counts()
plt.axis('equal')
explode = (0, 0, 0,0.1,0.1,0.2,0.3,0.4,0.6)
colors = ['#191970','#001CF0','#0038E2','#0055D4','#0071C6','#008DB8','#00AAAA','#00C69C','#00E28E','#00FF80',]
counts.plot(kind='pie', fontsize=17,colors=colors,explode=explode)
plt.legend(labels=group_names,loc="best")
plt.show()
数据看起来像
20-50 km 1109
50-75 km 696
10-20 km 353
75-100 km 192
3-5 km 168
7-10 km 86
5-7 km 74
>100 km 65
2-3 km 53
dtype: int64
答案 0 :(得分:10)
group_names
与counts.index
的顺序不同。所以不要使用
plt.legend(labels=group_names,loc="best")
使用
plt.legend(labels=counts.index, loc="best")
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
group_names = ['2-3 km', '3-5 km', '5-7 km', '7-10 km', '10-20 km', '20-50 km',
'50-75 km', '75-100 km', '>100 km']
counts = pd.Series([1109, 696, 353, 192, 168, 86, 74, 65, 53],
index=['20-50 km', '50-75 km', '10-20 km', '75-100 km',
'3-5 km', '7-10 km', '5-7 km', '>100 km', '2-3 km'])
explode = (0, 0, 0, 0.1, 0.1, 0.2, 0.3, 0.4, 0.6)
colors = ['#191970', '#001CF0', '#0038E2', '#0055D4', '#0071C6', '#008DB8', '#00AAAA',
'#00C69C', '#00E28E', '#00FF80', ]
counts.plot(kind='pie', fontsize=17, colors=colors, explode=explode)
plt.axis('equal')
plt.ylabel('')
plt.legend(labels=counts.index, loc="best")
plt.show()
答案 1 :(得分:2)
答案 2 :(得分:0)
您可以将pandas DataFrame转换为列表并直接使用matplotlib绘图:
sizes = counts.values.tolist()
plt.axis('equal')
plt.pie(sizes,explode=explode,labels=group_names,colors=colors)
plt.legend(labels=group_names,loc="best")
plt.show()