我有一个分组的条形图。它工作得很好,但我试图删除空的条形图。他们占用太多空间。
我已经尝试过了:
%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)
但它没有用。酒吧仍然是一样的。 还有其他方法可以删除空条吗?
答案 0 :(得分: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'])
显示
就是这样。 Plot需要在透视后显示所有组。
修改强>
您还可以使用堆积图来摆脱空间
table.plot(kind='barh', width = 0.9, color = ['b', 'g', 'r'], stacked=True)