mean1,mean2,mean3=avgSlove(X,y)
label_list = ['色调', '红色均值', '相对红色分量', '粗度','高频能量'] # 横坐标刻度显示值
xx = range(len(label_list))
rects1 = plt.bar(x=xx, height=mean1, width=0.4, alpha=0.8, color='blue')
plt.ylim(0, 1) # y轴取值范围
plt.ylabel("归一化后的值")
plt.xticks([index + 0.2 for index in xx], label_list)
plt.xlabel("特征")
plt.show()
以上代码的效果如下,可以看到横坐标刻度线不在柱状图的中间而在右边,这样的美观性不好看
查阅官网 matplotlib 的 bar 函数参数后,解决了此问题。
解决办法
bar 函数中 align
参数默认为 center
只要添加 align='edge',
然后设置 xticks 的时候加上柱状图宽度的一半即可
mean1,mean2,mean3=avgSlove(X,y)
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
label_list = ['色调', '红色均值', '相对红色分量', '粗度','高频能量'] # 横坐标刻度显示值
print(len(label_list))
xx = range(len(label_list))
'''调整图窗大小'''
params = {
'figure.figsize': '5, 5'
}
plt.rcParams.update(params)
'''调整图窗大小'''
rects1 = plt.bar(x=xx, height=mean1, width=0.6, alpha=0.8,align='edge', color='blue')
plt.ylim(0, 1) # y轴取值范围
plt.ylabel("归一化后的值")
plt.xticks([index + 0.3 for index in xx], label_list) #这儿的0.3是配合宽度0.6来的,是他的一半,目的是让刻度线在柱子的中间
plt.xlabel("特征",labelpad=8.5) # labelpad 是设置标签离坐标轴的距离
plt.show()