python画多列对比的柱状图(复制可运行)

源代码:

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

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方-教育技术博主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值