2016-02-18 11 views
4

Я создал круговую диаграмму, используя обертку Pandas counts.plot(kind='pie') и Matplotlib прямо `plt.pie (counts).Matplotlib, Pandas, Pie Chart Яркие ошибки

Проблема заключается в маркировке. Использование обеих круговых диаграмм представляется правильно с точки зрения значений = pie wedge, однако ярлыки отключены, когда я начинаю вводить пользовательские цвета и легенды.

enter image description here

Круговая диаграмма этикетки являются правильными, но легенда этикетки рисунок в зависимости от их порядка этикетки в group_name, а не их значения. Есть какие нибудь идеи как это починить?

Code =

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 

ответ

8

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() 

enter image description here

0

Вы можете преобразовать панд 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() 
1

Создание значения считается, если я снимаю автосортировку, легенда рисуется правильно.

counts = df['categories'].value_counts(sort=False)enter image description here