我想画一个横轴为特征重要性,纵轴为特征名称的条形图,如果该特征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()
这个一般没有好方法,你可以对程序进行以下修改;
str1 = \
"""
*** p<0.001
** p<0.010
* p<0.050
"""
plt.text(0.35, 3.7, str1, fontsize=23,verticalalignment="center",horizontalalignment="right",
bbox=dict(fc='white', ec='k', lw=1, alpha=0.5, pad=10))
plt.show()
运行结果为:
加图例,参考
import matplotlib.pyplot as plt
# 定义图例文本和图例图形
legend_labels = ['p < 0.001', 'p < 0.01', 'p < 0.05']
legend_markers = ['*', '**', '***']
# 添加图例
plt.legend(legend_markers, legend_labels)
```c
```
您可以在绘制条形图的时候,使用plt.text函数,指定一个偏移量,将星号放置在条形图的右边。例如,假设条形图的高度为height,那么可以使用以下代码将星号放置在条形图的右边:
plt.text(i.get_width() + 0.005, i.get_y() + height / 2, 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))
调整x和y的值,即可将图例放置在您希望的位置。
使用matplotlib画出整齐的显著性图例,可以使用以下方法:
1.在matplotlib中,显著性图例通常用于标记不同的数据点或数据系列,以便让读者更容易理解图表的信息。
2.在创建图表时,使用matplotlib的plot函数绘制图表。在绘制每个数据点或数据系列时,使用label参数为其指定一个显著性图例的标签。
3.在图表绘制完成后,使用matplotlib的legend函数创建一个显著性图例。在调用legend函数时,可以使用loc参数指定显著性图例的位置,使用bbox_to_anchor参数指定显著性图例的对齐方式,使用ncol参数指定显著性图例的列数,使用frameon参数控制是否显示显著性图例的边框等。
import matplotlib.pyplot as plt
# 绘制折线图
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], label='y = x^2')
plt.plot([1, 2, 3, 4], [2, 5, 10, 17], label='y = x^2 + 1')
# 创建显著性图例
plt.legend(loc='upper right', bbox_to_anchor=(1, 1), ncol=1, frameon=False)
或者参考
import matplotlib.pyplot as plt
# 绘制折线图
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], label='y = x^2')
plt.plot([1, 2, 3, 4], [2, 5, 10, 17], label='y = x^2 + 1')
# 创建显著性图例
plt.legend(loc='upper right', bbox_to_anchor=(1, 1), ncol=1, frameon=False,
title='Curves', fontsize=16, facecolor='white', edgecolor='black')
可参考该博主系列文章【超级详细matplotlib使用教程,手把手教你画图!(多个图、刻度、标签、图例等)】,链接:https://blog.csdn.net/sinat_39620217/article/details/115670663