2016-11-22 4 views
0

Mein Ziel ist es, ein gestapeltes Balkendiagramm eines mehrstufigen Datenrahmens zu erstellen. Die Datenrahmen sieht wie folgt aus:Pandas gestapeltes Balkendiagramm mit sortierten Werten

import pandas as pd 
import numpy as np 

arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux', 'qux']), 
      np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two', 'three'])] 

s = pd.Series([10,20,10,22,10,24,10,26, 11], index=arrays) 

In[1]: s 

Out[1]: 
bar one  10 
    two  20 
baz one  10 
    two  22 
foo one  10 
    two  24 
qux one  10 
    two  26 
    three 11 
dtype: int64 

Ich habe zwei Ziele:

  1. ein gestapeltes Balkendiagramm so schaffen, dass die Werte bis 4 genannten einzelnen Behälter gestapelt sind "bar, baz, foo, qux" .

  2. Die 4 Bars sollten nach Größe sortiert werden. In diesem Beispiel hat der Qux-Balken eine Höhe (10 + 26 + 11 =) 47 und sollte die erste links sein, gefolgt vom foo-Balken mit der Größe (10 + 24) = 34.

Antwort

4
  1. Sortieren der ersten Ebene Index nach ist es Gesamtsumme:

s_sort = s.groupby(level=[0]).sum().sort_values(ascending=False) 
s_sort 
qux 47 
foo 34 
baz 32 
bar 30 
dtype: int64 
  1. Reindex zurück, die neuen sortierten Indexwerte unter Verwendung von in die erste Ebene + unstack + Plot:

cmp = plt.cm.get_cmap('jet') 
s.reindex(index=s_sort.index, level=0).unstack().plot.bar(stacked=True, cmap=cmp) 

enter image description here

+1

Großen. Wusste nicht über den "Jet" Trick. Vielen Dank! – Pat

+0

Gern geschehen! Ja, die Farben sind in dieser Einstellung wirklich ausgezeichnet. –

Verwandte Themen