Python連接數據庫使用matplotlib畫柱形圖
一、柱形圖介紹
(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')
到此這篇關於Python連接數據庫使用matplotlib畫柱形圖的文章就介紹到這瞭,更多相關Python matplotlib柱形圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 淺析python連接數據庫的重要事項
- 詳解Python如何利用pymysql封裝項目通用的連接和查詢
- python數據可視化之matplotlib.pyplot基礎以及折線圖
- python連接數據庫後通過占位符添加數據
- Python 可視化matplotlib模塊基礎知識