2015-06-18 11 views
9

द्वारा जेनरेट किए गए समूहीकृत हिस्टोग्राम में किंवदंतियों और शीर्षक को कैसे जोड़ा जाए, मैं डेटाफ्रेम में उन सभी विशेषताओं द्वारा समूहीकृत कई विशेषताओं के हिस्टोग्राम को साजिश करने का प्रयास कर रहा हूं।पांडस

इस question की सहायता से, मैं साजिश के लिए शीर्षक निर्धारित करने में सक्षम हूं। क्या प्रत्येक सबप्लॉट के लिए किंवदंती पर स्विच करने का कोई आसान तरीका है।

यहाँ मेरी कोड है

import numpy as np 
from numpy.random import randn,randint 
import pandas as pd 
from pandas import DataFrame 
import pylab as pl 

x=DataFrame(randn(100).reshape(20,5),columns=list('abcde')) 
x['new']=pd.Series(randint(0,3,10)) 
x.hist(by='new') 
pl.suptitle('hist by new') 

enter image description here

उत्तर

8

आप कर सकते हैं लगभग करके आप क्या चाहते हैं पाने:

g.plot(kind='bar') 

लेकिन यह समूह में एक भूखंड का उत्पादन (और नहीं करता है ' समूहों के बाद भूखंडों का नाम नहीं है, इसलिए यह थोड़ा बेकार आईएमओ है।)

यहाँ कुछ है जो नहीं बल्कि सुंदर लग रहा है, लेकिन काफी "मैन्युअल" matplotlib काम है, जो हर किसी से बचने के लिए चाहता है की एक बहुत कुछ शामिल है, लेकिन कोई भी कर सकते हैं:

import numpy.random as rnd 
import pandas as pd 
import matplotlib.pyplot as plt 
from matplotlib import cm 

x = pd.DataFrame(rnd.randn(100).reshape(20, 5), columns=list('abcde')) 

group_col = 'groups' 
groups = ['foo', 'bar', 'baz'] 
x[group_col] = pd.Series(rnd.choice(groups, len(x))) 

g = x.groupby(group_col) 
num_groups = g.ngroups 

fig, axes = plt.subplots(num_groups) 
for i, (k, group) in enumerate(g): 
    ax = axes[i] 
    ax.set_title(k) 
    group = group[[c for c in group.columns if c != group_col]] 
    num_columns = len(group.columns) 
    colours = cm.Spectral([float(x)/num_columns for x in range(num_columns)]) 
    ax.hist(group.values, 5, histtype='bar', 
      label=list(group.columns), color=colours, 
      linewidth=1, edgecolor='white') 
    ax.legend() 

plt.show() 

कौन सा मुझे लगता है कि आप देता है कि आप क्या चाहते: Beautiful histogram


अद्यतन टिप्पणियों के जवाब में (और के रूप में इस सवाल का जवाब कुछ साल पुरानी है) मैं अपने barest हड्डियों के लिए नीचे इस सवाल का जवाब पट्टी की कोशिश की है। अब groupby ऑब्जेक्ट्स के प्लॉट लेबलिंग का एक तरीका हो सकता है लेकिन मुझे इसकी जानकारी नहीं है।

axes = g.plot(kind='hist') 
for i, (groupname, group) in enumerate(g): 
    axes[i].set_title(groupname) 
+0

अद्भुत:

यहाँ यह करने के लिए सरल संभव तरीका है। तो, असली matplotlib api के साथ गंदा के साथ हाथों के बिना यह करने के लिए कोई रास्ता नहीं है। यह एक पांडा सीमा होनी चाहिए, क्या मैं सही हूँ? – vumaasha

+0

मैं हिस्टोग्राम की तलाश में हूं? मैं सलाखों को हिस्टोग्राम में कैसे परिवर्तित कर सकता हूं? – vumaasha

+2

मैंने हिस्टोग्राम का उपयोग करने के लिए उत्तर अपडेट किया है (और परिणाम को बहुत सुंदर बनाते हैं।) – LondonRob