Python连接数据库使用matplotlib画柱形图
作者:Sheenky 发布时间:2024-01-21 19:02:49
一、柱形图介绍
(1)介绍
柱状图(Histogram),也称条图(英文:bargraph)、长条图(英文:barchart)、条状图(Bar graph),是一种以长方形的长度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱状图亦可横向排列,或用多维方式表达。
(2)优点、缺点
优点:
①便于用户理解大量数据以及数据相互之间的关系。
②优点是让用户通过视觉化的符号,更加快速直观的读取原始数据。
缺点:
柱状图的局限在于只适用中小规模的数据集。
(3)适用范围
适用场合是二维数据集,用于比较一段时间内的数据变化
二、数据介绍
(1)数据构成
本次柱状图绘画数据是由数据库中的订单表(order)提供,其中表order含有订单编号(ORDER_ID)、订单日期(ORDER_DATE)、店铺名称(SITE)等二十一个列。
(2)数据选取
根据柱形图的定义以及适用范围,我们本次画图选用的数据是具有统计计数并且能够比较的数据,因此我们本次选择销售经理以及订单利润。
在Navicat中通过SQL语句统计出2019年各个销售经理所销售的利润。
SELECT MANAGER, SUM(PROFIT) as TotalProfit FROM orders where FY='2019' group by MANAGER
三、python数据库连接配置以及数据提取设置
(1)调用库以及连接语法
没有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='连接表名')
(2)语法参数讲解
调用库后通过pymysql.connect创建连接,连接参数如下:
host:主机名,也可以存储的ip地址
port:数据库端口号,一般的数据库端口号3306
user:用户名
password:用户密码
db:数据库名称
(3)数据提取设置
连接数据库,在数据库中提取数据就涉及到数据库的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)
四、全局变量配置
(1)字体画布配置
此处的字体画布设置在使用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
(2)标题、标签设置
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呢????)
五、数据库数据画图
(1)画图函数调用并作出图形
通过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'])
作出图形如图:
(2)全代码
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')
来源:https://blog.csdn.net/Sheenky/article/details/125043265


猜你喜欢
- 1.综述又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以
- 什么是协程协程(Coroutine)是一种比线程更加轻量级的并发方式,它不需要线程上下文切换的开销,可以在单线程中实现并发。协程通常具有以下
- 列表的索引取值1. 列表的索引和字符串一样,列表中的每一个元素也都有一个属于自己的编号,这个编号就是列表的索引。2. 列表索引取值通过字符串
- 最近在做webIM,嵌入到OA系统,由于WEBIM处在独立页面,所以如果多次点击就会出现多个页面,这样在IE6下,服务器推送会认不到页面.所
- 本文实例讲述了python使用socket进行简单网络连接的方法。分享给大家供大家参考。具体如下:import socketprint &q
- frm文件和ibd文件简介 在MySQL中,如果我们使用了默认的存储引擎innodb创建一张表,那么在文件夹下面就会
- 这是为了实现一个效果,而提前作的测试代码!看起来很简单的一个东西,到这会,大约四个小时过去了。不知道是IE6的BUG;还是我自已的BUG!有
- 好了,废话少说,我们先看看几个示例吧一、打开一个网页获取所有的内容from urllib import urlopendoc = urlop
- 加号+, 是字符串优先.并且从左向右计算. 就是运算前后两个值,只要有一个是字符串,就会将其中一个非字符串的试图转换成字符串.
- 这篇日志完全是看了一篇日志后的启发,原文为: * 的eval和new Function。很少使用new Array的方式来定义数组,没想到ne
- 本文实例讲述了python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法。分享给大家供大家参考。具体实现方法如下:#!/us
- BEGIN -- 声明变量 DECLARE v_addtime_begin varchar(13); DECLARE v_addtime_e
- 什么是Scrapy?Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各
- 由于本人经常使用笔记本共享WiFi,但是又不想笔记本开机一夜(为了低碳环保嘛 ~_~!),所以每次都要用使用DOS命令关机,感觉好麻烦。正好
- NetworkX是一个非常强大的网络科学工具,它封装了图的数据结构和许多经典图算法,也内置了许多可视化函数可供调用。1. 随机图生成最经典的
- 最好不要在 base 环境中安装或者配置一些包之类的,它是 Python 的基础环境,为了更好的管理 Python 环境
- 本文实例讲述了python使用分治法实现求解最大值的方法。分享给大家供大家参考。具体分析如下:题目:给定一个顺序表,编写一个求出其最大值和最
- 本文介绍了node.js用fs.rename强制重命名或移动文件夹的方法,首先介绍了rename的用法,具体如下:【重命名文件夹】// re
- 前言分析任何规模的数据的重要性怎么强调都不为过。 我们日常生活的几乎每个部分都是数据驱动的,作为开发人员,在构建任何合理大小的应用程序时,首
- 介绍Addit 是一个Python模块,除了提供标准的字典语法外,Addit 生成的字典的值既可以使用属性来获取,也可以使用属性进行设置。这