龙空技术网

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

python学徒 107

前言:

现时我们对“c语言bar”大体比较讲究,兄弟们都想要剖析一些“c语言bar”的相关知识。那么小编同时在网络上汇集了一些关于“c语言bar””的相关文章,希望你们能喜欢,兄弟们一起来学习一下吧!

图示:

2018年各月份订单数量

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

标签: #c语言bar