解决 python plt画柱状图(棒状图)时横坐标刻度线不在中间而在右边

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()

在这里插入图片描述

posted on 2021-06-10 20:36  雾恋过往  阅读(2375)  评论(1编辑  收藏  举报

Live2D