2014-12-16 5 views
2

Я черчение фигуры с тремя сюжетными:Улучшения маркировки на круговой диаграмме в сюжетных

fig = plt.figure(fignum) 
ax11 = plt.subplot2grid((2,2), (0,0)) 
ax12 = plt.subplot2grid((2,2), (0,1)) 
ax13 = plt.subplot2grid((2,2), (1,0), colspan=2) 
ax13.axis('off') 

я использую панду для моих данных, и я хочу, чтобы построить гистограмму, круговую диаграмму, и Таблица. Я делаю это:

d = pd.Series(data,index) 

#plotting the first subplot 
d.plot(kind='bar',ax=ax11) 

#plotting the second one and adjusting size of labels and percentages 
(wedges, texts, autotexts) = ax12.pie(d,labels=d.index,autopct='%1.1f%%') 
ax12.axis('equal') 
for t in texts: 
     t.set_size(7) 
for t in autotexts: 
     t.set_size(7) 

#plotting the third axes, the table 
ax13.table(cellText=table,colLabels=columns,loc='bottom') 

Вот как получается:

enter image description here

Как я могу сделать круговую диаграмму выглядеть лучше, не имея метки пересекаются? Я пытался добавить легенду, но она покрывает график, и я даже не знаю, если это в конечном итоге в том месте, я уточнение:

ax12.legend(index,loc='lower right',fontsize=7) 

enter image description here

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

ответ

1

bbox_to_anchor позволяет позиционировать легенду на холсте фигуры.

см: http://matplotlib.org/users/legend_guide.html

import matplotlib.pyplot as plt 
import pandas 

fig = plt.figure() 
ax11 = plt.subplot2grid((2,2), (0,0)) 
ax11.bar([1,2,3,4,3,2,1],[1,2,3,4,3,2,1]) 
ax11.set_xticklabels(["local user","whetever works","L'ours tourne","en rond","dans sa cage",2,1], rotation="vertical") 

ax12 = plt.subplot2grid((2,2), (0,1)) 
ax12.pie([10,20,30,5,5,6,4,10,10], labels = ["bewarfefvl","easdfgvagfvd","asasdfve.sd","rgdegaf","adfewga","qargw","qaerghrttw","errrrd","ejjjjd"],autopct='%1.1f%%') 
ax12.axis('equal') 
ax12.legend(loc='lower right',fontsize=7, bbox_to_anchor = (0.75, -01.0)) 


ax13 = plt.subplot2grid((2,2), (1,0), colspan=2) 
ax13.axis('off') 

plt.show() 

Хотя вы можете пропустить легенду и улучшить читаемость круговой диаграммы, регулируя его. Я могу думать о трех способов сделать это, но это является не означает исчерпывающий список:

  1. При передаче списка в качестве аргумента, вы можете влиять на относительное положение каждого среза в графике, для того, чтобы избежать кластеров небольших фрагментов, путем замены порядка значений в списке. Вероятно, есть способ достичь этого в pandas.

  2. labeldistance позволяет контролировать расстояние до метки на диаграмме.

  3. Передача второго массива как аргумент explode, позволяет смещать позицию каждого среза.

Простой пример ниже:

ax12 = plt.subplot2grid((2,2), (0,1)) 
labels = ["bewarfefvl","easdfgvagfvd","asasdfve.sd", 
       "rgdegaf","adfewga","qargw","qaerghrttw","errrrd","ejjjjd"] 
ax12.pie([10,20,30,5,5,6,4,10,10], [0,0,0.0,0.1,0.3,.5,0,0,0], 
          labels = labels, labeldistance=1.2) 
Смежные вопросы