2017-09-20 21 views
0

我有一個分組的條形圖。它工作得很好,但我嘗試刪除空的線路圖。他們佔用太多空間。從分組的條形圖中刪除空欄

我已經嘗試:

%matplotlib inline 
import matplotlib as mpl 
from matplotlib.gridspec import GridSpec 
import matplotlib.pyplot as plt 
import sys 
import os 
import glob 
import seaborn as sns 
import pandas as pd 
import ggplot 
from ggplot import aes 

sns.set(style= "whitegrid", palette="pastel", color_codes=True) 

tab_folder = 'myData' 
out_folder ='myData/plots' 
tab = glob.glob('%s/R*.tab'%(tab_folder)) 

#is reading all my data 
for i, tab_file in enumerate(tab): 
    folder,file_name=os.path.split(tab_file) 
    s_id=file_name[:-4].replace('DD','') 
    df=pd.DataFrame.from_csv(tab_file, sep='\t') 

    df_2 = df.groupby(['name','ab']).size().reset_index(name='count') 

    df_2 = df_2[df_2['count'] != 0] 

    table = pd.pivot_table(df_2, index='name',columns='ab', values='count') 
    table.plot(kind='barh', width = 0.9, color = ['b', 'g', 'r'], ax = ax) 

    for label in (ax.get_xticklabels() + ax.get_yticklabels()): 

     label.set_fontsize(4) 


    ax.set_title(s_id).update({'color':'black', 'size':5, 'family':'monospace'}) 
    ax.set_xlabel('') 
    ax.set_ylabel('') 

    handles, labels = ax.get_legend_handles_labels() 
    ax.legend(handles[::-1], labels[::-1], bbox_to_anchor=(1, 1.05),prop= {'size': 4}) 

png_t = '%s/%s.b.png'%(out_folder,s_id) 
plt.savefig(png_t, dpi = 500) 

但它不工作。酒吧仍然是一樣的。 是否有任何其他方法來刪除空欄?

+1

很難幫助你時,你不提供有關資料的任何信息。請提供一個[最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve) –

+0

刪除空白條將非常困難。但是你可以沿着只想繪製你想要的酒吧的路線走。如果您需要幫助,請提供問題的[mcve]。 – ImportanceOfBeingErnest

+0

我發佈了整個代碼 – Fox

回答

0

您的問題不完整。我不知道你想完成什麼,但是從你所說的話我猜你已經嘗試不顯示空的樞軸對。

這是不可能的標準手段的熊貓。小組的劇情需要顯示所有人甚至NaNs這將被繪製爲「空欄」

此外,在groupby之後,每組至少大小爲1,所以df_2[df_2['count'] != 0]總是如此。

例如

df = pd.DataFrame([['nameA', 'abA'], ['nameB', 'abA'],['nameA','abB'],['nameD', 'abD']], columns=['names', 'ab']) 
df_2 = df.groupby(['names', 'ab']).size().reset_index(name='count') 
df_2 = df_2[df_2['count'] != 0] # this line has no effect 
table = pd.pivot_table(df_2, index='names',columns='ab', values='count') 
table 

給出

ab  abA  abB  abD 
names   
nameA 1.00 1.00 NaN 
nameB 1.00 NaN  NaN 
nameD NaN  NaN  1.00 

table.plot(kind='barh', width = 0.9, color = ['b', 'g', 'r']) 

顯示

enter image description here

就是這樣。圖表需要在樞軸後顯示所有組。

編輯

您還可以使用堆疊的情節,擺脫空間

table.plot(kind='barh', width = 0.9, color = ['b', 'g', 'r'], stacked=True) 

stacked

+0

謝謝你的這個例子。但我仍然想擺脫它們。你現在有另一種方法去除它們嗎?我也編輯了我的代碼。 Mayby,幫助 – Fox

+0

您的代碼不完整,因爲我們不知道使用任何數據。 – tworec