发布时间:2023-09-01 09:00
目录
一、柱形图介绍
(1)介绍
(2)优点、缺点
(3)适用范围
二、数据介绍
(1)数据构成
(2)数据选取
三、python数据库连接配置以及数据提取设置
(1)调用库以及连接语法
(2)语法参数讲解
(3)数据提取设置
四、全局变量配置
(1)字体画布配置
(2)标题、标签设置
五、数据库数据画图
(1)画图函数调用并作出图形
(2)全代码
柱状图(Histogram),也称条图(英文:bargraph)、长条图(英文:barchart)、条状图(Bar graph),是一种以长方形的长度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱状图亦可横向排列,或用多维方式表达。
优点:
①便于用户理解大量数据以及数据相互之间的关系。
②优点是让用户通过视觉化的符号,更加快速直观的读取原始数据。
缺点:
柱状图的局限在于只适用中小规模的数据集。
适用场合是二维数据集,用于比较一段时间内的数据变化
本次柱状图绘画数据是由数据库中的订单表(order)提供,其中表order含有订单编号(ORDER_ID)、订单日期(ORDER_DATE)、店铺名称(SITE)等二十一个列。
根据柱形图的定义以及适用范围,我们本次画图选用的数据是具有统计计数并且能够比较的数据,因此我们本次选择销售经理以及订单利润。
在Navicat中通过SQL语句统计出2019年各个销售经理所销售的利润。
SELECT MANAGER, SUM(PROFIT) as TotalProfit FROM orders where FY=\'2019\' group by MANAGER
没有pymysql库,可以通过语句pip install pymysql方式安装
import pymysql
import pandas as pd # 用来做数据导入(pd.read_sql_query() 执行sql语句得到结果df)
import matplotlib.pyplot as plt # 用来画图(plt.plot()折线图, plt.bar()柱状图,....)
# 1. 连接MySQL数据库: 创建数据库连接
conn = pymysql.connect(host=\'ip\',port=端口号,user=\'用户名\',password=\'用户密码\',db=\'连接表名\')
调用库后通过pymysql.connect创建连接,连接参数如下:
host:主机名,也可以存储的ip地址
port:数据库端口号,一般的数据库端口号3306
user:用户名
password:用户密码
db:数据库名称
连接数据库,在数据库中提取数据就涉及到数据库的SQL查询,此处也会有简单数据库在Python下的操作方法。
# 2 创建一个sql语句
# -- 统计每个销售经理2019年的利润总额
sql = r\"SELECT MANAGER, SUM(PROFIT) as TotalProfit FROM orders where FY=\'2019\' group by MANAGER\"
# 3 执行sql语句获取统计查询结果
df = pd.read_sql_query(sql, conn)
此处的字体画布设置在使用matplotlib画图时都可以放在库导入之后,当成固定的设置,其中的参数介绍在前面plot()函数画图时已经做出介绍详细请看前面的文章。
plt.rcParams[\'font.sans-serif\'] = \'SimHei\' # 设置中文字体支持中文显示
plt.rcParams[\'axes.unicode_minus\'] = False # 支持中文字体下显示\'-\'号
# figure 分辨率 800x600
plt.rcParams[\'figure.figsize\'] = (6,4) # 8x6 inches
plt.rcParams[\'figure.dpi\'] = 100 # 100 dot per inch
title()是标题设置,ylael()设置y轴的标签,grid()网格线设置
#标签、标题设置
plt.title(\"每个销售经理2019年的利润总额\")
plt.ylabel(\"利润额\")
plt.xlabel(\'经理\')
#网格线设置
plt.grid(axis=\'y\')
网格线设置参数介绍
plt.grid() # 显示网格线 1=True=默认显示;0=False=不显示
plt.grid(1) # 显示网格线
plt.grid(True) # 显示网格线
plt.grid(b=True) # 显示网格线
plt.grid(b=1) # 显示网格线
plt.grid(b=True, axis=\'x\') #只显示x轴网格线
plt.grid(b=True, axis=\'y\') #只显示y轴网格线
plt.grid(b=1, which=\'major\') # 默认就是major,例如x轴最大值为3.5(这个值占比极小,不影响作图的话),这部分图像不会显示;若which=\'both\'则显示;若设置为minor则不显示网格(其实这里有点不懂,,既然不显示,那为什么不直接设置为b=0呢????)
通过for循环将每个经理对应的值画入图像上
#y轴值的显示
for index,value in df[\'TotalProfit\'].items():
plt.text(index,value,round(value),ha=\'center\',va=\'bottom\',color=\'k\')
#通过上述查询的结果进行x,y的带入
plt.bar(df[\'MANAGER\'], df[\'TotalProfit\'])
作出图形如图:
import pymysql
import pandas as pd # 用来做数据导入(pd.read_sql_query() 执行sql语句得到结果df)
import matplotlib.pyplot as plt # 用来画图(plt.plot()折线图, plt.bar()柱状图,....)
plt.rcParams[\'font.sans-serif\'] = \'SimHei\' # 设置中文字体支持中文显示
plt.rcParams[\'axes.unicode_minus\'] = False # 支持中文字体下显示\'-\'号
# figure 分辨率 800x600
plt.rcParams[\'figure.figsize\'] = (6,4) # 8x6 inches
plt.rcParams[\'figure.dpi\'] = 100 # 100 dot per inch
#建立连接
conn = pymysql.connect(host=\'localhost\',port=3306,user=\'root\',password=\'9812yang\',db=\'mydb\')
#设置查询语句
sql = r\"SELECT MANAGER, SUM(PROFIT) as TotalProfit FROM orders where FY=\'2019\' group by MANAGER\"
#执行sql语句获取统计查询结果,并赋值
df = pd.read_sql_query(sql, conn)
#调用函数
plt.bar(df[\'MANAGER\'], df[\'TotalProfit\'])
#设置y轴的网格线
plt.grid(axis=\'y\')
#设置标题
plt.title(\"每个销售经理2019年的利润总额\")
#y轴标签
plt.ylabel(\"利润额\")
#x轴标签
plt.xlabel(\"经理姓名\")
#将对应数值写入柱形图
for index,value in df[\'TotalProfit\'].items():
plt.text(index,value,round(value),ha=\'center\',va=\'bottom\',color=\'k\')
vue2 怎么用vite_利用 vite 快速搭建 vue3 组件库
又一个Jupyter神器,操作Excel自动生成Python代码!
.NET Core 实现后台任务(定时任务)BackgroundService(二)
灰度共生矩阵描述纹理 LBP局部二值(人脸识别) Gabor滤波器 人脸识别
报表工具对比评论汇总,选型看这一篇就够了---------报表工具对比软文最全的收集汇总帖子
python中文编程教学_Python入门教程完整版400集(懂中文就能学会)快来带走
解决Mac下腾讯会议无法使用OBS等虚拟摄像头问题(不关闭SIP,适用M1)