寫在最最前邊:框架
其實只須要把Matplotlib當成一種工具來使用,沒必要深究,只要可以會調用畫出本身想要的效果圖來顯示一下就perfect了。嗯哼dom
Matplotlib概述:函數
Matplotlib 是一個Python的2D繪圖庫,它以各類硬拷貝格式和跨平臺的交互式環境生成出版質量級別的圖形。工具
數據"UNRATE.csv"是統計的美國從1948年開始每月中 待業人數佔總人數的百分之幾。編碼
.plot()是用來❀折線圖的。spa
要求:用折線圖繪製出1948年的12個月中待業人數的狀況。3d
在開始✿畫折線圖以前,咱們觀察了一下數據,發現"UNRATE.csv"數據中的"DATE"的顯示格式是1948/1/1,用斜槓分割日期看起來不怎麼樣,仍是轉換一下好了,那用什麼進行轉換呢?code
在Pandas有一個函數pd.to_datetime()能夠把日期轉化成爲標準的1948-01-01的格式。orm
import pandas as pd unrate = pd.read_csv("unrate.csv") #讀取數據文件並賦值給變量unrate
unrate["DATE"] = pd.to_datetime(unrate["DATE"]) #將數據中1948/1/1這樣的日期格式轉化成標準的日期格式
print(unrate.head(12)) #打印數據的前12行
運行結果:blog
使用不一樣的pyplot函數,咱們能夠建立、定製和顯示一個plot
import matplotlib.pyplot as plt #引進繪圖的matplotlib庫,並別名爲plt #使用不一樣的pyplot函數,咱們能夠建立、定製和顯示一個plot。
plt.plot() #先不給.plot()添加參數,看一下效果
plt.show() #顯示
運行結果:
先經過切片的方式取出數據集中的前12條數據,即1948年12個月的待業率數據。
在接下來會給plot()添加兩個參數,第一個參數做爲折線圖的x軸數據,第二個參數做爲折線圖的y軸參數。
first_twelve = unrate[0:12] #經過切片[0:12]取出DataFrame類型的變量unrate的前12行數據
#fiest_twelve數據是由12行的「DATE」和「VALUE」組成的 #添加.plot()的參數,第一個參數做爲x軸數據(日期),第二個參數做爲y軸數據(待業率),
plt.plot(first_twelve["DATE"],first_twelve["VALUE"]) plt.show() #顯示
運行結果:
plt.xticks(rotation = 45) #把x軸的座標顯示成45度角的樣子
其中rotation = ?, 等於多少就傾斜多少度
plt.plot(first_twelve["DATE"],first_twelve["VALUE"]) plt.xticks(rotation = 45) #把x軸的座標顯示成45度角的樣子
plt.yticks(rotation = 45) #一樣y軸也有這樣的操做
plt.show()
運行結果:
plt.plot(first_twelve["DATE"],first_twelve["VALUE"]) plt.xticks(rotation = 45) #把x軸的座標顯示成45度角的樣子
plt.xlabel("Month") #給x軸加標籤
plt.ylabel("Unemployment Rate") #給y軸加標籤
plt.title("Monthly Unemployment Trends,1948") #給圖加標題
plt.show()
運行結果:
有時候咱們須要在一個區域裏畫多個圖,至關於子圖的形狀。作經常使用於論文。
在一個區域裏想統計不少的指標,而這不少個指標沒辦法放在一個圖中,因此須要畫多個子圖,以下邊這樣子的羅列。
那麼添加子圖須要用的函數是:
add_subplot(a,b,c) 參數a:區域中子圖的行數爲a
參數b:區域中子圖的列數爲b (則本區域中子圖的總個數是a×b個)
參數c:要添加的單個子圖在區域中的第幾個 (排列編號爲從左到右,從上到下)
plt.figure() 函數做用:要畫子圖,就要指定畫圖的區域,此函數就是用來指定畫圖的區域的,當其沒有參數的時候,表示指定默認畫圖區域。
import matplotlib.pyplot as plt #引進繪圖的matplotlib庫,並別名爲plt
#畫子圖
fig = plt.figure() #.figure()沒有參數,指定默認畫圖的區間,理解爲定義畫圖區域 #經過add_subplot()的參數能夠看出,子圖是兩行兩列的,第一個參數表示行,第二個參數表示列 #第三個參數表示圖中的一個子圖在整個圖中的位置(但願我說的清楚)
ax1 = fig.add_subplot(2,2,1) ax2 = fig.add_subplot(2,2,2) ax3 = fig.add_subplot(2,2,4) plt.show()
運行結果:
在2.1 中只是初始化了畫圖區域和其中的子圖的框架,但並無畫任何東西,天然是要畫一些什麼的,那就用隨機畫法隨便來點什麼吧
plt.figure(figsize = (a,b))
figure(參數) 有參數的時候就再也不是指定一個默認的畫圖區域了
參數figsize是爲了指定畫圖區域的大小,
第一個參數a指畫圖區域的長度爲a個單位,第二個參數b是指畫圖區域的寬度爲b個單位
import numpy as np #fig = plt.figure()
fig = plt.figure(figsize = (6,3)) #.figure(參數)有參數的時候就再也不是指定一個默認的畫圖區域了
#參數figsize是爲了指定畫圖區域的大小,第一個參數指畫圖區域的長度,第二個參數是指畫圖區域的寬度 #在畫圖區域添加子圖
ax1 = fig.add_subplot(2,1,1) ax2 = fig.add_subplot(2,1,2) ax1.plot(np.random.randint(1,5,5),np.arange(5)) #隨機的畫點東西
ax2.plot(np.arange(10)*3,np.arange(10)) plt.show()
運行結果:
在上邊的小的程序段中,.plot() 一下就在在一張圖上畫了一條折線,但也只有一條。若是想在一張圖上畫上兩條折線應該怎麼作呢:固然是.plot()兩下啦
還用上邊美國待業率的數據集 .unrate.csv
注意: unrate["DATE"].dt.month #把全部數據集中的數據每12個數據進行了新的編碼,用來區分每年的12個月
咱們知道DataFrame類型的變量unrate是.read_csv("unrate.csv")以後被賦值的,變量unrate的就是數據集中的數據。而unrate["DATE"]則是取數據中的「DATE」日期這一列的數據,用.dt.month對數據集中的每12個數據進行新的編碼。運行效果圖以下所示:
plt.plot(a,b,c)表示畫折線: 參數a:表示把a做爲x軸,
參數b:表示把b做爲y軸
參數c:表示折線的顏色
針對數據集,對每年的數據作一個折線統計會看出這一年的待業率的變化狀況,如今是想在一個圖中顯示兩條折線,那麼咱們就選取兩年的數據爲好,每年的數據一共12行,unrate[0:12]用來取1948年的數據。unrate[0:12]["MONTH"]是把月份做爲x軸,同理unrate[0:12]["VALUE"]是把待業率做爲y軸
#在一個圖中畫兩條線。——plot兩次(還可指定不一樣的顏色)
unrate["MONTH"] = unrate["DATE"].dt.month #把全部數據集中的數據每12個數據進行了新的編碼,用來區分每年的12個月 #print(unrate["MONTH"])
fig = plt.figure(figsize = (6,3)) #指定畫圖區域大小,長6寬3
plt.plot(unrate[0:12]["MONTH"],unrate[0:12]["VALUE"],C = "red") #取從新編了碼的數據的前12行,即一個年份的數據進行了繪製 #plot(a,b,c) 參數a:表示把a做爲x軸,參數b:表示把b做爲y軸,參數c:表示折線的顏色
plt.plot(unrate[12:24]["MONTH"],unrate[12:24]["VALUE"],C = "blue") plt.show()
運行結果:
如上邊所示,在一個圖上不但可以顯示兩條折線,固然也能夠更多啦,那就是多plot()幾回,可是做爲一個計算機人,在屢次重複同一操做的時候天然用到的應該是循環啊。
先定義一個關於顏色的list,以便於標註不一樣顏色的線。
colors = ["red","blue","green","orange","black"]
而後用for循環,循環的取不一樣年份的數據。
#用5種顏色畫出5年的待業率數據,用循環
fig = plt.figure(figsize = (10,6)) colors = ["red","blue","green","orange","black"] for i in range(5): #range----[0,1,2,3,4]
start_index = i*12 #當i = 0,數據子集subset去數據的[0:12]行 即1948年的數據
#當i = 1,數據子集subset去數據的[12:24]行 即1949年的數據
#........
##當i = 4,數據子集subset去數據的[48:60]行 即1952年的數據
end_index = (i+1)*12 subset = unrate[start_index:end_index] plt.plot(subset["MONTH"],subset["VALUE"],c = colors[i]) #以」MONTH「爲x軸。以"VALUE"爲y軸,顏色也是循環list
plt.show()
運行結果:
上邊的五線圖看着挺好看是吧,可是你可以分清那條顏色的線表明的哪個年份的數據嗎?很困難吧,除非你是一個一個在於顏色比對,那是否是可以讓表示年份的信息與不一樣的顏色對比起來的信息放在圖中啊?
就像下邊這樣。
這個東西啊,實際上是由函數plt.legend(loc = "best")獲得的。
plt.legend(loc = "best") 其中legengd的參數loc能夠等於不少不一樣的值,利用print(help(plt.legend))來查閱一下幫助文檔,發現:表示這個說明性的方塊放在圖中的位置。默認爲best
固然了不但要顯示,還要有顯示的內容與什麼有關,本例中顯示的內容與年份有關,因此定義了label = (1948+i)
#用5種顏色畫出5年的待業率數據,用循環
fig = plt.figure(figsize = (10,6)) colors = ["red","blue","green","orange","black"] for i in range(5): #range----[0,1,2,3,4]
start_index = i*12 #當i = 0,數據子集subset去數據的[0:12]行 即1948年的數據
#當i = 1,數據子集subset去數據的[12:24]行 即1949年的數據
#........
##當i = 4,數據子集subset去數據的[48:60]行 即1952年的數據
end_index = (i+1)*12 subset = unrate[start_index:end_index] label = str(1948 + i) plt.plot(subset["MONTH"],subset["VALUE"],c = colors[i],label = label) #以」MONTH「爲x軸。以"VALUE"爲y軸,顏色也是循環list
plt.legend(loc = "best") #print(help(plt.legend))
plt.show()
運行結果:
若是你問我有比上邊更完美的五線圖嗎?我必定會確定的告訴你,有!!!!
那就是添加上一些說明信息,好比圖的標題,還有橫縱座標的說明等。
#用5種顏色畫出5年的待業率數據,用循環
fig = plt.figure(figsize = (10,6)) colors = ["red","blue","green","orange","black"] for i in range(5): #range----[0,1,2,3,4]
start_index = i*12 #當i = 0,數據子集subset去數據的[0:12]行 即1948年的數據
#當i = 1,數據子集subset去數據的[12:24]行 即1949年的數據
#........
##當i = 4,數據子集subset去數據的[48:60]行 即1952年的數據
end_index = (i+1)*12 subset = unrate[start_index:end_index] label = str(1948 + i) plt.plot(subset["MONTH"],subset["VALUE"],c = colors[i],label = label) #以」MONTH「爲x軸。以"VALUE"爲y軸,顏色也是循環list
plt.legend(loc = "upper left") plt.xlabel("Month, Integer") plt.ylabel("Unemployment Rate, Percent") plt.title("Monthly Unemployment Trends, 1948-1952") plt.show()
運行結果: