我想画一个横轴为特征重要性,纵轴为特征名称的条形图,如果该特征p<0.001,就在条形图旁加上3个星号,并在空白处用类似图例的样子显示出来。我用plt.text手动做了个图例出来,但是可以看到这个手动图例对不齐。如果这个图例可以对齐,那就是我想实现的效果了。
如果设置图例的话,由于显著性并不是条形图本身的内容,再加上图例形状里也没有星号,该如何进行设置呢?
import matplotlib.pyplot as plt
x_sorted = ['A', 'B', 'C', 'D', 'E']
importances_sorted = [0.1, 0.2, 0.1, 0.4, 0.2]
p_values_sorted = [0.02, 0.004, 0.1, 0.0001, 0.008]
sign = []
for i in range(len(p_values_sorted)):
if p_values_sorted[i] < 0.001:
sign.append('***')
elif 0.001 <= p_values_sorted[i] < 0.01:
sign.append('**')
elif 0.01 <= p_values_sorted[i] < 0.05:
sign.append('*')
else:
sign.append('')
plt.figure(figsize=[11, 7])
fig = plt.barh(x_sorted, importances_sorted, height=0.5,)
for index, i in enumerate(fig):
width = i.get_width()
plt.text(width+0.005, i.get_y()+0.135, sign[index], va='center', ha='left', fontsize=23)
plt.text(0.35, 3.7, '*** p<0.001\n** p<0.01\n* p<0.05', fontsize=23, bbox=dict(fc='white', ec='k', lw=1, alpha=0.5, pad=10))
plt.show()