2015-10-08 14 views
7

मैं निम्नलिखित पांडा DataFrame ('ए' अंतिम स्तंभ के हेडर है, शेष कॉलम एक संयुक्त श्रेणीबद्ध सूचकांक हैं):hierarchic पाई/डोनट चार्ट

A 
kingdom  phylum   class    order    family      genus    species    
No blast hit                               2496 
k__Archaea p__Euryarchaeota c__Thermoplasmata o__E2    f__[Methanomassiliicoccaceae] g__vadinCA11  s__    6 
k__Bacteria p__    c__    o__     f__       g__    s__    5 
      p__Actinobacteria c__Acidimicrobiia o__Acidimicrobiales f__       g__    s__    0 
           c__Actinobacteria o__Actinomycetales f__Corynebacteriaceae   g__Corynebacterium s__stationis  2 
                     f__Micrococcaceae    g__Arthrobacter s__    8 
               o__Bifidobacteriales f__Bifidobacteriaceae   g__Bifidobacterium s__    506 
                                 s__animalis  48 
           c__Coriobacteriia o__Coriobacteriales f__Coriobacteriaceae   g__    s__    734 
                            g__Collinsella  s__aerofaciens  3 

(डेटा के साथ एक सीएसवी here)

मैं एक पाई/डोनट चार्ट में साजिश करना चाहता हूं, जहां प्रत्येक केंद्रित चक्र एक स्तर (साम्राज्य, फ़िलम, आदि) है और स्तंभ ए के योग के अनुसार विभाजित है उस स्तर के लिए, इसलिए मैं इस तरह के कुछ के साथ समाप्त होता हूं, लेकिन मेरे डेटा के साथ:

disk usage chart

मैं matplotlib और बोकेह देखा है, लेकिन सबसे समान बात मैं अब तक मिल गया है, बोकेह डोनट चार्ट उदाहरण है एक पदावनत चार्ट का उपयोग कर, जो मैं और अधिक के लिए एक्सट्रपलेशन पता नहीं कैसे 2 स्तरों से अधिक।

+0

हाय, नहीं एक: layered pie chart random data

अपने वास्तविक डेटा पर यह इस तरह दिखता है पायथनिक उत्तर, लेकिन आपको ऐसा करने के लिए एक बहुत अच्छा पर्ल प्रोग्राम में दिलचस्पी हो सकती है, जहां पाइचार्ट इंटरैक्टिव है (आप उपश्रेणियों में ज़ूम इन कर सकते हैं), इसे _ क्रोना टूल्स_ कहा जाता है: [https://github.com/marbl/Krona /wiki](https://github.com/marbl/Krona/wiki)। इसके अलावा, जैसा कि मैंने देखा है कि आप मेटाप्लाएन हैं और टैक्सन बहुतायत पर काम करते हैं, तो आप मेरी पाइपलाइन _metaBIT_ पसंद कर सकते हैं जो मेटाप्लाएएन निष्पादन और डाउन-स्ट्रीम विश्लेषण (क्रोन चार्ट बनाने सहित) को स्वचालित करें: [https://bitbucket.org/Glouvel/metabit] (https://bitbucket.org/Glouvel/metabit) – PlasmaBinturong

उत्तर

7

मुझे नहीं पता कि यह कुछ पूर्व परिभाषित है या नहीं, लेकिन यह समूहबी और ओवरलैपिंग पाई प्लॉट का उपयोग करके अपना खुद का निर्माण करना संभव है। मैंने आपके डेटा को लेने के लिए निम्न स्क्रिप्ट का निर्माण किया है और कम से कम कुछ जो आपने निर्दिष्ट किया है उसके समान कुछ प्राप्त किया है।

ध्यान दें कि समूह कॉल (जिसे प्रत्येक स्तर पर कुल योग की गणना करने के लिए उपयोग किया जाता है) को चीजों को सही ढंग से लाइन करने के लिए सॉर्टिंग बंद करनी चाहिए। आपका डेटासेट भी बहुत गैर-वर्दी है, इसलिए मैंने चित्रण के लिए परिणामी चार्ट को थोड़ा सा फैलाने के लिए कुछ यादृच्छिक डेटा बनाया है।

आपको शायद रंग और लेबल की स्थिति में बदलाव करना होगा, लेकिन यह एक शुरुआत हो सकती है।

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 

df = pd.read_csv('species.csv') 
df = df.dropna() # Drop the "no hits" line 
df['A'] = np.random.rand(len(df)) * 100 + 1 

# Do the summing to get the values for each layer 
def nested_pie(df): 

    cols = df.columns.tolist() 
    outd = {} 
    gb = df.groupby(cols[0], sort=False).sum() 
    outd[0] = {'names':gb.index.values, 'values':gb.values} 
    for lev in range(1,7): 
     gb = df.groupby(cols[:(lev+1)], sort=False).sum() 
     outd[lev] = {'names':gb.index.levels[lev][gb.index.labels[lev]].tolist(), 
        'values':gb.values} 
    return outd 

outd = nested_pie(df) 
diff = 1/7.0 

# This first pie chart fill the plot, it's the lowest level 
plt.pie(outd[6]['values'], labels=outd[6]['names'], labeldistance=0.9, 
     colors=plt.style.library['bmh']['axes.color_cycle']) 
ax = plt.gca() 
# For each successive plot, change the max radius so that they overlay 
for i in np.arange(5,-1,-1): 
    ax.pie(outd[i]['values'], labels=outd[i]['names'], 
      radius=np.float(i+1)/7.0, labeldistance=((2*(i+1)-1)/14.0)/((i+1)/7.0), 
      colors=plt.style.library['bmh']['axes.color_cycle']) 
ax.set_aspect('equal') 

Modulo random() करने के लिए कॉल से मामूली परिवर्तन, इस पैदावार इस तरह एक साजिश:

layered pie chart user data

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