Python 在条形图中每个条形图的水平中间放置重要星号
我编写了一个名为Python 在条形图中每个条形图的水平中间放置重要星号,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我编写了一个名为Chi2Independence的类。使用这个类,您可以执行两个分类变量之间的独立性的Chi2测试。该类还有一种称为test_residuals的方法,其中标准化残差进行显著性测试。最后,您可以使用方法plot将结果可视化。类别的重要组合将通过在相应栏上方放置星号来表示。然而,在当前版本中,星号并不完全在杆的中间,而是稍微向左移动。下面是一个最小的示例,其中创建了一个虚拟数据框,然后使用“我的绘图”函数进行可视化: import seaborn as sns import pan
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')
这是输出条形图:
有人知道如何解决这个问题,使星号准确地放置在每个条上方的水平中间位置吗?我只需使用
文本
将星号与中心
水平对齐即可。绘制垂直线只是为了目视检查星号是否在中心
for p, sig in zip(barplot.patches,stdres_sig_sorted):
if sig == True:
barplot.text(p.get_x() + p.get_width() / 2., p.get_height(),
'*', ha='center')
barplot.axvline(p.get_x() + p.get_width() / 2., lw=0.5)