matplotlib 柱状图_matplotlib学习记录:柱状图bar()

ee7003e1170a394e51bb139b5cc455c0.png

图示:

ca2504d36b00991fe730228b649304af.png

2018年各月份订单数量

7385dd5a049f623952fd394886aabef7.png

2019年各月份订单数量

知识点:

1、从数据库中得到数据

先定义了一个sql语句:

sql = "SELECT MONTH(经营部下单日期),COUNT(1) FROM 合同评审 WHERE 经营部下单日期 BETWEEN '{}-01-01' AND '{}-12-31' GROUP BY MONTH(经营部下单日期) ORDER BY MONTH(经营部下单日期)".format(年份,年份)

然后调用了一个mdb_query()方法:

result_list = db.mdb_query(sql)

db.py中封装了连接数据库、查询数据库、执行数据库操作的语句:

# -*- coding:utf-8 -*-__author__ = '86****20'#导入模块import pymssql#定义conndef mdb_conn():    conn = pymssql.connect(ip, username, password, databasename)    return conn#增删改def mdb_sqlext(sql):    try:        conn = mdb_conn()        cur = conn.cursor()        cur.execute(sql)        conn.commit()        cur.close()        conn.close()        return True    except:        return False#查询记录def mdb_query(sql):    try:        conn = mdb_conn()        cur = conn.cursor()        cur.execute(sql)        result = cur.fetchall()        cur.close()        conn.close()        return result    except Exception as e:        print(e)        return []

返回的数量是一个列表,列表中每一项元组,序号0对应MONTH(经营部下单日期),这是月份,序号1对应COUNT(1),这是合同数量。

使用列表推导式将每项的[0]元素取出,即月份

x = [i[0] for i in result_list]

再得到[1]为订单数合计

 y = [i[1] for i in result_list]

x轴的标签是月份,正好跟x一样

 xlabel = [i[0] for i in result_list]

2、柱状图绘制

plt.bar(x,y,align="center",width=0.5,bottom=0,color="r",tick_label=xlabel,hatch="/")

3、参数:

align:对齐,center/edge

width=0.8,柱体的宽度,如果改为1,两个柱体会挨在一起

bottom=0,柱体在y轴的地始数,如果定为100,假设一月份的数量是200,柱形图的顶部会跑到300,所以一般不建议设置此值

color:柱体颜色(框线与填充),这是图形,大多使用color,如果是文本的话一般使用c来代表颜色

tick_label:标签,列表

hatch:填充图案,有多种"o","/","/","+"

另外还可以设置边框颜色、填充颜色、边框宽度等等,基本上能想得到的都能设置,只不过没有书籍有完整的去记录,更多参数可访问class Axes.bar()方法源码

代码:

import matplotlib.pyplot as pltimport numpy as npimport matplotlib as mplimport dbmpl.rcParams['font.sans-serif'] = ['SimHei']mpl.rcParams['axes.unicode_minus'] = False# 定义数据年份 = 2018sql = "SELECT MONTH(经营部下单日期),COUNT(1) FROM 合同评审 WHERE 经营部下单日期 BETWEEN '{}-01-01' AND '{}-12-31' GROUP BY MONTH(经营部下单日期) ORDER BY MONTH(经营部下单日期)".format(年份,年份)result_list = db.mdb_query(sql)x = [i[0] for i in result_list]y = [i[1] for i in result_list]xlabel = [i[0] for i in result_list]# 绘制柱状图plt.bar(x,y,align="center",bottom=0,width=0.8,color="r",tick_label=xlabel,hatch="/")# 设置标签plt.xlabel("月份")plt.ylabel("订单数量")# 设置标题plt.title("{}年订单数量统计".format(年份))# 设置y轴范围plt.ylim(0,500)# 设置辅助线maxnum = max(y)plt.axhline(y=maxnum,c="b",label="最大数量")mean = sum(y)/len(y)plt.axhline(y=mean,c="g",label="平均值")plt.legend()plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值