我写了一个叫做Chi2Independence
的类。通过此类,您可以在两个分类变量之间执行Chi2独立性测试。该类还具有一种称为test_residuals
的方法,在该方法中测试了标准化残差的重要性。最后,您可以使用方法plot
可视化结果。通过在相应的条上方放置一个星号来指示类别的重要组合。但是,在当前版本中,星号不完全位于条形图的中间,而是向左稍微偏移一点。这是一个最小的示例,其中创建了一个虚拟数据框,然后使用我的绘图函数将其可视化:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
# create a the dataframe
chi2_df = pd.DataFrame({'survived':[0,0,0,1,1,1],
'class':['First','Second','Third','First','Second','Third'],
'Frequency':[80,97,372,136,87,119],
'sig':[True,True,True,True,True,True]})
# plot results
def plot(df_freq,x_var,hue_var,title,dst_dir=None):
stdres_sig_sorted = df_freq.sort_values(hue_var)['sig']
barplot = sns.barplot(x=x_var, y='Frequency', hue=hue_var,data=df_freq)
barplot.set_xticklabels(barplot.get_xticklabels(), rotation=45)
barplot.get_xticklabels()
barplot.set_title(title)
for p,sig in zip(barplot.patches,stdres_sig_sorted):
if sig == True:
barplot.annotate('*', (p.get_x() + p.get_width() / 2., p.get_height()),
ha='center', va='center', fontsize=11, color='gray', rotation=90, xytext=(0,10),
textcoords='offset points')
plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5), ncol=1)
plt.tight_layout()
plot(df_freq=chi2_df,x_var='class',hue_var='survived',title='Class | Survived')
这是输出条形图:
有人知道如何解决此问题,以便将星号准确地放置在每个小节上方的水平中间位置吗?