(十)Matplotlib知識學習2-python數(shù)據(jù)分析與機器學習實戰(zhàn)(學習筆記)

文章原創(chuàng),最近更新:2018-05-8

1.子圖的繪制
2.在同一個圖中畫兩條折線圖

課程來源: python數(shù)據(jù)分析與機器學習實戰(zhàn)-唐宇迪

為了方便大家學習,將練習所涉及的練習unrate.csv文件以百度網(wǎng)盤共享的方式分享出來.
鏈接: https://pan.baidu.com/s/1ixwJ8OLkVuO36E2f28ZtmQ 密碼: qcvh

1.子圖的繪制

1.1關于子圖的介紹

很多情況下,在一個區(qū)域,不光畫一個圖,而且要畫很多個圖,相當于一個子圖的結構.比如說,在一個區(qū)域里面,要統(tǒng)計多個指標,這些指標沒辦法放在一個圖當中,因此需要畫很多的子圖.比如如下截圖有3種格式.四個圖形可以按自定義的方式羅列在一起,接下來是子圖的操作.

以下子圖常見的定義介紹:

  • 子圖:就是在一張figure里面生成多張子圖。
  • Matplotlib:對象簡介
  • FigureCanvas:畫布
  • Figure:圖
  • Axes:坐標軸(實際畫圖的地方)

1.2 add_subplot & subplot函數(shù)的介紹


注意批什,pyplot的方式中plt.subplot()參數(shù)和面向對象中的add_subplot()參數(shù)和含義都相同蛹稍。

針對add_subplot對以下截圖的子圖布局進行一個簡單的介紹

fig.add_subplot(4,1,x),是造一個子圖,子圖的結構是4行1列的結構

fig.add_subplot(2,2,x),是造一個子圖,子圖的結構是2行2列的結構.特別注意排列的規(guī)則,從上到下,從左到右的排序結構.

fig.add_subplot(2,3,x),是造一個子圖,子圖的結構是2行3列的結構.

1.3畫子圖

首先導進matplotlib.pyplot,如下:

import matplotlib.pyplot as plt

對plt.figure函數(shù)進行了解,具體如下:

plt.figure(figsize=(w, h)) #創(chuàng)建對象徒扶,并指定寬度w高度h嵌施,默認像素為80ppi奈泪,單位為100像素几于?還是英寸佛析?

plt.figure是指畫圖的時候的一個默認區(qū)間.是一個畫圖區(qū)域.

在畫圖域加子圖,我們看一下是怎么加子圖的?

答案是通過flg.add_subplot函數(shù)加子圖,比如

  • flg.add_subplot(2,2,1)
  • flg.add_subplot(2,2,2)
  • flg.add_subplot(2,2,4)
    這里的1,2,4分別表達式什么含義呢?
import matplotlib.pyplot as plt

fig=plt.figure()
ax1=fig.add_subplot(2,2,1)
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,4)
plt.show()

輸出的結果如下:


通過結果可以看出,將一個圖劃分為2行2列,1代表的是左上角的位置,2代表的是右上角的位置,,4代表的是右下角的位置.因為3沒有寫代碼定義,因此右下角沒有畫出來.

plt.figure(figsize=(w, h)) #創(chuàng)建對象,并指定寬度w高度h.plt.figure(figsize=(3, 3)),這里指的是不光要指定一個畫圖的區(qū)域,而且要定義畫圖區(qū)域的大小.寬度為3,高度為3.

import matplotlib.pyplot as plt
import numpy as np

fig=plt.figure(figsize=(3,3))
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()

顯示的結果如下:


如果將fig=plt.figure(figsize=(3,3))改成fig=plt.figure(figsize=(3,6))結果會怎么樣?

import matplotlib.pyplot as plt
import numpy as np

fig=plt.figure(figsize=(6,6))
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()

顯示的結果如下:

通過以上的顯示的結果,發(fā)現(xiàn)(3,3)改成(3,6)之后,長不變,寬變大了.

2.在同一個圖中畫兩條折線圖

在同一個圖中畫兩條折現(xiàn)應該怎么畫呢?并且線的顏色不一樣的?

2.1了解plot函數(shù)

  • 拓外plot函數(shù):
    下面首先了解plot這個函數(shù):
    plot()提供曲線與標志"兩種"類型圖形(重要)闯参。下面以簡單語法為例進行講解瞻鹏。
    plot(x,y,’cs’,label=’testin‘)#其中x表示X軸數(shù)據(jù);y表示Y軸數(shù)據(jù)(如Y值沒有輸入鹿寨,X軸坐標為自動分配新博,x值將會作為Y軸數(shù)據(jù));c為顏色定義字符串脚草;s為圖形定義字符串赫悄,label為圖內(nèi)標簽。

    • 顏色字符串定義對照附表
    image

2.2了解timedate庫

help(dt.month)
Help on getset descriptor datetime.date.month:
month

具體案例如下:

import matplotlib.pyplot as plt
import numpy as np


unrate=pd.read_csv("unrate.csv")
unrate["DATE"]=pd.to_datetime(unrate["DATE"])
unrate['MONTH'] = unrate['DATE'].dt.month
unrate['MONTH'] = unrate['DATE'].dt.month
fig = plt.figure(figsize=(6,3))

plt.plot(unrate[0:12]['MONTH'], unrate[0:12]['VALUE'], c='red')
plt.plot(unrate[12:24]['MONTH'], unrate[12:24]['VALUE'], c='blue')

plt.show()

輸出結果如下:


從結果來看,紅藍色的線分別代表什么?從圖片看不出來,需要額外的操作指定出來.

具體實例如下:
首先把1948-1952年,每年的浮動情況都畫出來.

import matplotlib.pyplot as plt
import numpy as np


unrate=pd.read_csv("unrate.csv")
unrate["DATE"]=pd.to_datetime(unrate["DATE"])

unrate['MONTH'] = unrate['DATE'].dt.month
unrate['MONTH'] = unrate['DATE'].dt.month

fig = plt.figure(figsize=(10,6))
colors = ['red', 'blue', 'green', 'orange', 'black']
for i in range(5):
    start_index = i*12
    end_index = (i+1)*12
    subset = unrate[start_index:end_index]
    plt.plot(subset['MONTH'], subset['VALUE'], c=colors[i])
    
plt.show()

顯示的結果如下:


2.3了解plt.legend函數(shù)

雖然線畫出來了,但是每條線代表什么樣的指標,圖片看不出來,藍色的線表示哪一年?綠色的線表示哪一年?紅色的線又代表哪一年?需要設置圖例的位置.

需要用到plt.legend函數(shù),具體用法可參考matplotlib命令與格式:圖例legend語法及設置

plt.legend(loc=參數(shù)),這個loc參數(shù)指的是顯示圖例的位置,而plt.plot()中的lable參數(shù),設置圖例的標簽,但是不會顯示出來,需要用到plt.legend()函數(shù)才可以顯示.

對原有的代碼新增代碼,以增加及顯示圖例的位置及圖例標簽

label = str(1948 + i)
plt.plot(subset['MONTH'], subset['VALUE'], c=colors[i],label=label)
plt.legend(loc="best")

完整的代碼如下:

import matplotlib.pyplot as plt
import numpy as np

unrate=pd.read_csv("unrate.csv")
unrate["DATE"]=pd.to_datetime(unrate["DATE"])
unrate['MONTH'] = unrate['DATE'].dt.month

fig = plt.figure(figsize=(10,6))
colors = ['red', 'blue', 'green', 'orange', 'black']
for i in range(5):
    start_index = i*12
    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)
plt.legend(loc="best")
plt.show()

輸出的結果如下:


為了完善,新增x,y軸的坐標名稱以及圖片的標題,又應該怎么做呢?將圖例位置放在左上角,該怎么操作?

新增以下代碼,以完善以上的要求:

plt.legend(loc="upper left")
plt.xlabel("Month, Integer")
plt.ylabel("Unemployment Rate, Percent")
plt.title("Monthly Unemployment Trends, 1948-1952")

完整代碼如下:

unrate=pd.read_csv("unrate.csv")
unrate["DATE"]=pd.to_datetime(unrate["DATE"])

unrate['MONTH'] = unrate['DATE'].dt.month

fig = plt.figure(figsize=(10,6))
colors = ['red', 'blue', 'green', 'orange', 'black']
for i in range(5):
    start_index = i*12
    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)
plt.legend(loc="upper left")
plt.xlabel("Month, Integer")
plt.ylabel("Unemployment Rate, Percent")
plt.title("Monthly Unemployment Trends, 1948-1952")
plt.show()

輸出的結果如下:


以上就是相對完整的一個折線圖.

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末馏慨,一起剝皮案震驚了整個濱河市埂淮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌写隶,老刑警劉巖倔撞,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異慕趴,居然都是意外死亡痪蝇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門冕房,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躏啰,“玉大人,你說我怎么就攤上這事耙册「” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵觅玻,是天一觀的道長想际。 經(jīng)常有香客問我培漏,道長,這世上最難降的妖魔是什么胡本? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任牌柄,我火速辦了婚禮,結果婚禮上侧甫,老公的妹妹穿的比我還像新娘珊佣。我一直安慰自己,他們只是感情好披粟,可當我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布咒锻。 她就那樣靜靜地躺著,像睡著了一般守屉。 火紅的嫁衣襯著肌膚如雪惑艇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天拇泛,我揣著相機與錄音滨巴,去河邊找鬼。 笑死俺叭,一個胖子當著我的面吹牛恭取,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熄守,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蜈垮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了裕照?” 一聲冷哼從身側響起攒发,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牍氛,沒想到半個月后晨继,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烟阐,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡搬俊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜒茄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唉擂。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖檀葛,靈堂內(nèi)的尸體忽然破棺而出玩祟,到底是詐尸還是另有隱情,我是刑警寧澤屿聋,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布空扎,位于F島的核電站藏鹊,受9級特大地震影響,放射性物質發(fā)生泄漏转锈。R本人自食惡果不足惜盘寡,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撮慨。 院中可真熱鬧竿痰,春花似錦、人聲如沸砌溺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽规伐。三九已至蟹倾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猖闪,已是汗流浹背喊式。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萧朝,地道東北人岔留。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像检柬,于是被迫代替她去往敵國和親献联。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內(nèi)容