2012-03-30 14 views
5

यह पिक्सन पर वेस्ले के ट्यूटोरियल में भाग लेने के बाद पांडस लाइब्रेरी के साथ खेलने का मेरा पहला प्रयास है।पांडा डेटा फ्रेम पर स्टैक्ड बारप्लॉट्स प्लॉटिंग

डेटाफ्रेम के साथ थोड़ा सा पोक करने के बाद मुझे खुशी है कि मैं जिस तरह से चाहता था उस डेटा को मालिश करने में सक्षम था लेकिन इसे साजिश में परेशानी थी। मुझे लगता है कि यह matplotlib पुस्तकालय के साथ मेरी नैतिकता को भी इंगित करता है।

मेरे पास निम्नलिखित डेटा के साथ पांडा श्रृंखला वस्तु है। मैं कर्नल 1 ('फाइल') के साथ एक बारप्लॉट के रूप में साजिश करना चाहता हूं, लेबल लंबवत रूप से उन्मुख लेबल के रूप में।

नमूना यहाँ डेटा: http://pastebin.com/y2w0uJPQ

+0

मुझे लगता है कि आप 'myserie.plot (kind = 'bar') से कुछ और चाहते हैं? – Avaris

उत्तर

13

मैं बस क्रियान्वित किया है पांडा के लिए Git भंडार में एक स्टैक्ड बार भूखंड समारोह, आगामी 0.7.3 रिहाई का हिस्सा होगा:

In [7]: df 
Out[7]: 
      a   b   c 
0 0.425199 0.564161 0.727342 
1 0.174849 0.071170 0.679178 
2 0.224619 0.331846 0.468959 
3 0.654766 0.189413 0.868011 
4 0.617331 0.715088 0.387540 
5 0.444001 0.069016 0.417990 
6 0.203908 0.689652 0.227135 
7 0.382930 0.874078 0.571042 
8 0.658687 0.493955 0.245392 
9 0.758986 0.385871 0.455357 

In [8]: df.plot(kind='barh', stacked=True) 

Stacked Bar Plot

यह ठीक से सकारात्मक और नकारात्मक संभालती मान (ऊपर मूल और सकारात्मक मानों के नीचे नकारात्मक मानों को ढंकना)

+0

वाह! दिखता है कि मैं क्या देख रहा था! आप ऊर्ध्वाधर कैसे बनाते हैं? – moldovean

2

हाल ही में मैं एक समारोह के लिए प्रोग्राम है बहुत समान कुछ करने के लिए। यहां आपके पास एक सरलीकृत संस्करण है:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
from matplotlib.figure import Figure 
from matplotlib.colors import colorConverter 
import matplotlib.lines as mlines 
import matplotlib 

def _add_legend(axes): 
    'It adds the legend to the plot' 
    box = axes.get_position() 
    axes.set_position([box.x0, box.y0, box.width * 0.9, box.height]) 

    handles, labels = axes.get_legend_handles_labels() 

    # sort by the labels 
    handel_lables = sorted(zip(handles, labels), key=operator.itemgetter(1)) 
    handles, labels = zip(*handel_lables) 

    axes.legend(handles, labels, bbox_to_anchor=(1.05, 1), loc=2, 
       borderaxespad=0., prop={'size':LEGEND_FONT_SIZE}, 
       fancybox=True, numpoints=1) 


def stacked_bars(matrix, fhand, bar_colors=None): 
    'It draws stacked columns' 
    bar_width = 1 
    fig = Figure(figsize=FIGURE_SIZE) 
    canvas = FigureCanvas(fig) 
    axes = fig.add_subplot(111) 
    nrows, ncols = matrix.shape 

    bar_locs = range(0, nrows) 
    cum_heights = numpy.zeros(nrows) 
    for col_index, (col_name, column) in enumerate(matrix.iteritems()): 
     color = bar_colors[col_index] if bar_colors is not None else None 
     values = column.values 
     axes.bar(bar_locs, values, color=color, bottom=cum_heights, 
       width=bar_width, label=col_name) 
     cum_heights += values 
    min_y, max_y = axes.get_ylim() 

    #bar labels 
    axes.set_xticks([l + bar_width * 0.4 for l in bar_locs]) 
    labels = axes.set_xticklabels([str(l) + ' ' for l in matrix.index.values], 
            fontsize=AXIS_LABELS_FONT_SIZE) 
    for label in labels: 
     label.set_rotation('vertical') 

    _add_legend(axes) 

    canvas.print_figure(fhand, format=_get_format_from_fname(fhand.name)) 
fhand.flush() 

मुझे आशा है कि इससे आपको कोई विचार प्राप्त करने में मदद मिलेगी।

+0

मुझे लगता है कि यह फ़ंक्शन केवल सकारात्मक मानों को संभालता है (संचयी ऊंचाइयों की गणना करते समय आपको सकारात्मक और नकारात्मक मानों को अलग करने की आवश्यकता होती है) –

+0

आप सही हैं, मैं केवल सकारात्मक मानों से चिंतित था क्योंकि मेरे मामले में नकारात्मक लोगों की अनुमति नहीं थी। –

संबंधित मुद्दे