我有一个分组条形图。它工作得很好,但我试图删除空的条形图。它们占用太多空间。
我已经试过了:
%matplotlib inline
import os
import glob
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
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.update({'color': 'black', 'size': 5, 'family': 'monospace'})
ax.set(xlabel='', ylabel='', title=s_id)
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条答案
按热度按时间k5ifujac1#
你的问题不完整。我不知道你想实现什么,但从你所说的,我猜你是试图不显示空的枢纽对。
这是不可能的标准手段的Pandas。组的图需要显示所有组,即使
NaNs
将被绘制为 “空条”。此外,在
groupby
之后,每个组的大小至少为1,因此df_2[df_2['count'] != 0]
始终为真。举个例子
给予
和
显示
事情就是这样图需要显示枢轴后的所有组。
您也可以使用堆叠图,以摆脱空间