首頁 > 軟體

Python連線資料庫使用matplotlib畫柱形圖

2022-06-29 22:00:28

一、柱形圖介紹

(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柱形圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com