源代码:
import matplotlib.pyplot as plt
import numpy as np
import read_excel
#防止画图中的乱码
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#导入要画的图的Excel
df1=read_excel.df1
df2=read_excel.df2
#设置 柱状图 有几组
size = 11
x = np.arange(size)
# 有a/b两种类型的数据,n设置为2 0.6不需要改,n设置为要对比机组
total_width, n = 0.6, 2
# 每种类型的柱状图宽度,不需要改
width = total_width / n
#把接受过来的唯一值转化成字典
dict1=read_excel.get_weiyizhi(df1).to_dict()
dict2=read_excel.get_weiyizhi(df2).to_dict()
#获取总数便于画频率图
total1=read_excel.get_total(df1)
total2=read_excel.get_total(df2)
# 把字典根据索引值排序的value复制给list1和list2,便于画图
#list1代表样本a,list2 代表样本b
list1=[]
list2=[]
i=1
#print(dict[i])
#循环给两个样本复制(从 Excel读取的值赋给两个list)
while(i<(len(dict1)+1)):
a=round(dict1[i] / total1, 2)
# print(i)
# print(a)
list1.append(a)
i+=1
i=1
print(dict2)
while(i<(len(dict2)+1)):
b=round(dict2[i] / total2, 2)
# print(i)
# print(a)
list2.append(b)
i+=1
# 重新设置x轴的坐标
x = x - (total_width - width) / 2
print(x)
# 画柱状图
plt.bar(x, list1, width=width, label="刘老师",color='#0066cc')
plt.bar(x + width,list2, width=width, label="陈老师",color='#9ACD32')
#如果 多个 对比,就加这句话
#plt.bar(x + 2*width, c, width=width, label="c")
plt.xticks(np.arange(11), ('1', '2', '3', '4', '5', '6', '7', '8','9','10','11'))
# 显示图例,font1 为了解决图例中文显示为方框的问题
font1 = {'family':'SimHei', 'weight':'normal'}
#调整画图的尺寸,如果需要可以加上
#plt.figure(dpi=300,figsize=(24,24))
plt.legend(loc='upper right',prop=font1)
plt.xlabel("编码类别")
plt.ylabel("频率")
#保存频率图,当然也可以保存矢量图 svg的格式,然后用origin软件转换之后,可以放入word写论文用
plt.savefig('pinlv.png',dpi=500)
# 显示柱状图
plt.show()
运行结果:
如果要修改成仅显示9组
代码如下
import matplotlib.pyplot as plt
import numpy as np
import read_excel
# 防止画图中的乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 导入要画的图的Excel
df1 = read_excel.df3
df2 = read_excel.df4
# 设置柱状图有几组(修改为9)
size = 9
x = np.arange(size)
# 有a/b两种类型的数据,n设置为2,0.6不需要改,n设置为要对比机组
total_width, n = 0.6, 2
# 每种类型的柱状图宽度,不需要改
width = total_width / n
# 把接受过来的唯一值转化成字典
dict1 = read_excel.get_weiyizhi(df1).to_dict()
dict2 = read_excel.get_weiyizhi(df2).to_dict()
# 获取总数便于画频率图
total1 = read_excel.get_total(df1)
total2 = read_excel.get_total(df2)
# 把字典根据索引值排序的value复制给list1和list2,便于画图
# list1代表样本a,list2代表样本b
list1 = []
list2 = []
i = 1
while i < (len(dict1) + 1):
a = round(dict1[i] / total1, 2)
list1.append(a)
i += 1
i = 1
while i < (len(dict2) + 1):
b = round(dict2[i] / total2, 2)
list2.append(b)
i += 1
# 重新设置x轴的坐标
x = x - (total_width - width) / 2
# 画柱状图
plt.bar(x, list1, width=width, label="刘老师", color='#0066cc')
plt.bar(x + width, list2, width=width, label="陈老师", color='#9ACD32')
plt.xticks(np.arange(9), ('1', '2', '3', '4', '5', '6', '7', '8', '9'))
# 显示图例
font1 = {'family': 'SimHei', 'weight': 'normal'}
plt.legend(loc='upper right', prop=font1)
plt.xlabel("编码类别")
plt.ylabel("频率")
plt.savefig('pinlv.png', dpi=500)
plt.show()