matplotlib資料視覺化圖表
阿新 • • 發佈:2021-11-01
第21章 matplotlib資料視覺化開發
Matplotlib是Python的一個數據視覺化工具包,可以方便地繪製資料統計相關的圖表,如折線圖、散點圖、直方圖等,強大的繪圖功能使Python廣泛用於資料探勘領域。
21.1 環境搭建
- 使用pip工具安裝模組:
pip install matplotlib
- 安裝前需確保Windows系統上已安裝visual studio .NET 執行庫。
21.2 實現簡單繪圖
matplotlib有兩大子模組,pyplot包含了繪製各種圖表的工具,pylab包含了繪製數學曲線工具。
-
繪製散點scatter()
import matplotlib.pyplot as plt # 定義樣本點橫座標、縱座標的列表 xset = [60,85.5,49.2,47.4] yset = [18.4,16.8,17.6,16.4] # 使用scatter()方法繪製散點,可設為紅色 plt.scatter(xset,yset,c='r') # 可以定義座標軸的範圍 plt.axis([0,90,0,20]) # 展示圖表 plt.show()
-
繪製折線plot()
import matplotlib.pyplot as plt # 定義樣本點縱座標的列表 xset = [0,1,2,3,4,5,6] yset = [0,1,4,9,16,25,36] set = [0,0.5,2,4.5,8,12.5,18] # 使用plot()方法繪製折線 plt.plot(xset,yset,c='r') # 當沒有指定橫座標時,預設序列的下標作為橫座標 plt.plot(set,c='b') # 展示圖表 plt.show()
-
設定標籤和線條樣式(注意,預設的字型庫不顯示中文)
import matplotlib.pyplot as plt import matplotlib as mpl xset = [0,1,2,3,4,5,6] yset = [0,1,4,9,16,25,36] plt.plot(xset,yset,c='r',linewidth='5') # 模組的全域性物件,匯入字型庫設定字型 mpl.rcParams["font.sans-serif"] = ["SimHei"] # 設定圖表的標籤說明 plt.title("示例圖表",fontsize=24) plt.xlabel("橫座標",fontsize=14) plt.ylabel("縱座標",fontsize=14) # 設定刻度的樣式 plt.tick_params(axis='both',labelsize=14) # 可以本地儲存為圖片 plt.savefig("示例圖表.png",bbox_inches='tight') # 第二個引數設定邊緣空白。 # 展示圖表 plt.show()
-
柱形圖bar()
-
原始的簡單柱形圖
import matplotlib.pyplot as plt import matplotlib as mpl # 設定圖表標籤 mpl.rcParams["font.sans-serif"] = ["SimHei"] plt.title("班級人數圖") plt.xlabel("班級") plt.ylabel("人數") # 繪製多個柱形,引數表:x座標、高度、寬度、校準(預設為center) plt.bar(x=(1,2,3,4),height=(45,50,40,55),width=0.4,align="edge") plt.show()
-
詳細標籤說明的柱形圖
import matplotlib.pyplot as plt import matplotlib as mpl # 設定圖表標籤 mpl.rcParams["font.sans-serif"] = ["SimHei"] plt.title("專業人數圖") plt.xlabel("專業") plt.ylabel("人數") plt.xticks((1,2,3,4),("計算機","機械","會計","日語")) plt.ylim(0,60) # 繪製多個柱形,引數表:x座標、高度、寬度、校準(預設為center) rectangles = plt.bar(x=(1,2,3,4),height=(45,50,40,55),width=0.4) # 可以用text()為柱形新增數值標註 for rect in rectangles: height = rect.get_height() plt.text(x=rect.get_x(), # x座標 y=height+1.5, # y座標 s="%s" % (height), # 標註內容 fontsize=15, # 字型大小 color="r", # 字型顏色 backgroundcolor="y", # 背景顏色 horizontalalignment="left", # 水平對齊 verticalalignment="bottom", # 豎直對齊 rotation=30, # 旋轉 alpha=0.4) # 透明度(0到1之間) plt.show()
-
-
繪製多幅子圖
-
實際上,matplotlib中呼叫plot()函式時,會首先呼叫gca()和gcf()兩個函式來獲取當前的座標軸和影象,如果沒有影象,則會用figure()函式建立一個,所以我們可以直接用figure()建立繪畫框,再用subplot()函式建立子圖。
import matplotlib.pyplot as plt # 建立一個繪圖框 fig = plt.figure() # 在繪圖框中建立兩個子圖p1、p2,引數表:多少行、多少列、第幾幅,預設(1,1,1) p1 = fig.add_subplot(2,1,1) p2 = fig.add_subplot(2,1,2) # 繪製兩個子圖 xset = [1,2,3,4,5,6,7,8] yset = [2,1,3,5,2,6,12,7] p1.plot(xset,yset,c='b') p2.scatter(xset,yset,c="r") plt.show()
-
-
繪製曲線
import matplotlib.pyplot as plt import matplotlib.pylab as lab # 設定定義域的範圍(-pi到pi)的列表,引數表:起始值,結束值,樣本數(樣條曲線)。 X = lab.np.linspace(start=-lab.np.pi,stop=lab.np.pi,num=256) # 使用數學函式設定值域的列表 C, S = lab.np.cos(X), lab.np.sin(X) # 繪製曲線 plt.plot(X,C) plt.plot(X,S) plt.xticks((-3.14,-1.57,0,1.57,3.14),("-pi","-pi/2","0","pi/2","pi")) plt.show()
21.3 大資料分析的示例
-
【.csv】檔案是一種儲存大資料的檔案,Python可以呼叫 csv模組解析這種檔案。
import csv import matplotlib as mpl import matplotlib.pyplot as plt from datetime import datetime # 定義資料集:日期、高溫、低溫 dateSet, highSet, lowSet = [],[],[] # 開啟一個本地的.csv檔案 with open("./death_valley_2014.csv") as file: read = csv.reader(file) header = next(read) # 遍歷每一行,並將相應數值新增到資料集。 for row in read: try: date = datetime.strptime(row[0],"%Y-%m-%d") # 按格式解析出日期。 high = int(row[1]) low = int(row[3]) except ValueError: print(date, "missing message") else: dateSet.append(date) highSet.append(high) lowSet.append(low) # 用資料集繪製圖形 plt.plot(dateSet,highSet,c='r',alpha=0.3) plt.plot(dateSet,lowSet,c='b',alpha=0.3) plt.fill_between(dateSet,highSet,lowSet,facecolor='b',alpha=0.2) # 設定圖表樣式 mpl.rcParams["font.sans-serif"] = ["SimHei"] plt.title("2014溫度變化圖") plt.xlabel("月份",fontsize=12) plt.ylabel("攝氏度",fontsize=12) plt.tick_params(axis="both",which="major",labelsize=20) plt.tick_params(axis="x",which="major",labelsize=12,rotation=30) plt.show()