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)等二十一个列。

Python连接数据库使用matplotlib画柱形图

(2)数据选取

根据柱形图的定义以及适用范围,我们本次画图选用的数据是具有统计计数并且能够比较的数据,因此我们本次选择销售经理以及订单利润。

在Navicat中通过SQL语句统计出2019年各个销售经理所销售的利润。

SELECT MANAGER, SUM(PROFIT) as TotalProfit FROM orders where FY='2019' group by MANAGER

Python连接数据库使用matplotlib画柱形图

三、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'])

作出图形如图:

Python连接数据库使用matplotlib画柱形图

(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

标签:Python,连接,数据库,matplotlib,绘制,柱形图
0
投稿

猜你喜欢

  • python做图片搜索引擎并保存到本地详情

    2021-08-27 01:42:33
  • python简单验证码识别的实现过程

    2021-09-12 12:40:55
  • python爬虫 正则表达式解析

    2022-07-16 18:24:01
  • JavaScript 应用技巧集合[推荐]

    2024-05-03 15:06:09
  • Django模板语言 Tags使用详解

    2022-09-27 23:37:35
  • MySQL数据库操作DQL正则表达式

    2024-01-14 13:04:48
  • 使用matplotlib中scatter方法画散点图

    2022-10-16 02:02:39
  • 详解Oracle数据库各类控制语句的使用

    2024-01-13 16:49:00
  • linux下python中文乱码解决方案详解

    2023-09-01 03:53:04
  • Python 标准库zipfile将文件夹加入压缩包的操作方法

    2021-09-17 14:06:10
  • JavaScript文档生成工具

    2007-10-26 11:59:00
  • 实现框架页面iframe的背景透明方法

    2008-06-18 12:21:00
  • python中shell执行知识点

    2022-11-30 08:41:15
  • php实现简单的权限管理的示例代码

    2024-05-05 09:18:37
  • Python中str is not callable问题详解及解决办法

    2023-10-30 05:34:42
  • Python之基础函数案例详解

    2023-07-09 19:43:24
  • JS实现二维数组横纵列转置的方法

    2023-08-29 21:54:05
  • MySQL和SQLServer的比较

    2024-01-15 00:30:39
  • MySQL错误Forcing close of thread的两种解决方法

    2024-01-25 15:24:44
  • pandas多级分组实现排序的方法

    2022-05-06 14:16:11
  • asp之家 网络编程 m.aspxhome.com