本代码可实现柱状图的绘制,比较全面。
原创文章,未经允许禁止转载,请尊重原创!!
如需转载
请私信联系,谢谢!
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 3 20:47:02 2021
@author: ywx
"""
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize = (12,8))
# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 输入统计数据
diseases = ['白粉病','黑斑病','褐斑病','黑星病','轮纹病','锈病']
color_diff = [0.24,0.14,0.17,0.25,0.26,0.23]
texture_diff = [0.12,0.12,0.15,0.15,0.24,0.12]
shape_diff = [0.08,0.05,0.12,0.13,0.21,0.05]
bar_width = 0.3 # 条形宽度
index_color = np.arange(len(diseases)) # 颜色差异条形图的横坐标
index_texture = index_color + bar_width # 纹理差异条形图的横坐标
index_shape = index_texture + bar_width #形状差异条形体的横坐标
# 使用两次 bar 函数画出两组条形图
plt.bar(index_color, height=color_diff, width=bar_width, color='steelblue', label='颜色差异')
plt.bar(index_texture, height=texture_diff, width=bar_width, color='coral', label='纹理差异')
plt.bar(index_shape, height=shape_diff, width=bar_width, color='lightseagreen', label='形状差异')
plt.legend(prop={'size':11}) # 显示图例
plt.xticks(index_color + bar_width, diseases,fontsize=15) # 让横坐标轴刻度显示 diseases , index_color + bar_width 为横坐标轴刻度的位置,让刻度显示在中间
plt.yticks(fontsize=15)
plt.xlabel('病害种类Kinds of disease',fontsize=17)
plt.ylabel('均方误差RMSE',fontsize=17)
c = np.arange(len(diseases))
# 设置颜色差异数字标签
for a, b in zip(c, color_diff): #这里直接用disease会报错,因为含有中文字符,不信你试试
plt.text(a, b+0.002, b, ha='center', va='bottom', fontsize=15) #加0.002是为了不让数字紧挨着柱状图,美观
# 设置纹理差异数字标签
for a, b in zip(c, texture_diff):
plt.text(a+bar_width, b+0.002, b, ha='center', va='bottom', fontsize=15)
# 设置形状差异标签
for a, b in zip(c, shape_diff):
plt.text(a+bar_width*2, b+0.002, b, ha='center', va='bottom', fontsize=15)
plt.show()