【機器學習】嘿馬機器學習(科學計算庫)第4篇:Matplotlib,學習目標【附代碼文檔】

本教程的知識點為:機器學習(常用科學計算庫的使用)基礎(chǔ)定位 機器學習概述 機器學習概述 1.5 機器學習算法分類 1 監(jiān)督學習 機器學習概述 1.7 Azure機器學習模型搭建實驗 Azure平臺簡介 Matplotlib 3.2 基礎(chǔ)繪圖功能 — 以折線圖為例 1 完善原始折線圖 — 給圖形添加輔助功能 Matplotlib 3.3 常見圖形繪制 1 常見圖形種類及意義 Numpy 4.2 N維數(shù)組-ndarray 1 ndarray的屬性 Numpy 4.4 ndarray運算 問題 Pandas 5.1Pandas介紹 1 Pandas介紹 Pandas 5.3 基本數(shù)據(jù)操作 1 索引操作 Pandas 5.6 文件讀取與存儲 1 CSV Pandas 5.8 高級處理-數(shù)據(jù)離散化 1 為什么要離散化 Pandas 5.12 案例 1 需求

倉庫里完整資料代碼:

博客文章1: http://www.reibang.com/p/f82881b822e6

感興趣的小伙伴可以自取哦~


全套教程部分目錄:


部分文件圖片:

Matplotlib

學習目標

  • 應用Matplotlib的基本功能實現(xiàn)圖形顯示
  • 應用Matplotlib實現(xiàn)多圖顯示
  • 應用Matplotlib實現(xiàn)不同畫圖種類

3.2 基礎(chǔ)繪圖功能 — 以折線圖為例

學習目標

  • 目標

    • 掌握給圖形添加輔助功能(如:標注产镐、x,y軸名稱、標題等)

    • 知道圖形的保存

    • 知道如何多次plot繪制圖形

    • 知道如何多個坐標系顯示圖形

    • 知道折線圖的應用場景


1 完善原始折線圖 — 給圖形添加輔助功能

為了更好地理解所有基礎(chǔ)繪圖功能,我們通過天氣溫度變化的繪圖來融合所有的基礎(chǔ)API使用

需求:畫出某城市11點到12點1小時內(nèi)每分鐘的溫度變化折線圖,溫度范圍在15度~18度

效果:

上海1

1.1 準備數(shù)據(jù)并畫出初始折線圖

import matplotlib.pyplot as plt
import random

  
  
# 畫出溫度變化圖
  
  

  
  
# 0.準備x, y坐標的數(shù)據(jù)
  
  
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

  
  
# 1.創(chuàng)建畫布
  
  
plt.figure(figsize=(20, 8), dpi=80)

  
  
# 2.繪制折線圖
  
  
plt.plot(x, y_shanghai)

  
  
# 3.顯示圖像
  
  
plt.show()
上海2

1.2 添加自定義x,y刻度

  • plt.xticks(x, **kwargs)

x:要顯示的刻度值

  • plt.yticks(y, **kwargs)

y:要顯示的刻度值

  
  
# 增加以下兩行代碼
  
  

  
  
# 構(gòu)造x軸刻度標簽
  
  
x_ticks_label = ["11點{}分".format(i) for i in x]
  
  
# 構(gòu)造y軸刻度
  
  
y_ticks = range(40)

  
  
# 修改x,y軸坐標的刻度顯示
  
  
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
上海3

如果沒有解決過中文問題的話县貌,會顯示這個樣子:

中文問題

1.3 中文顯示問題解決

解決方案一:

下載中文字體(黑體潦刃,看準系統(tǒng)版本)

  • 步驟一:下載 SimHei 字體(或者其他的支持中文顯示的字體也行)

  • 步驟二:安裝字體

    • linux下:拷貝字體到 usr/share/fonts 下:

sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf




* windows和mac下:雙擊安裝


* 步驟三:刪除~/.matplotlib中的緩存文件

```python
cd ~/.matplotlib
rm -r *
  • 步驟四:修改配置文件matplotlibrc
vi ~/.matplotlib/matplotlibrc

將文件內(nèi)容修改為:

font.family         : sans-serif
font.sans-serif         : SimHei
axes.unicode_minus  : False

解決方案二:

在Python腳本中動態(tài)設(shè)置matplotlibrc,這樣也可以避免由于更改配置文件而造成的麻煩,具體代碼如下:

from pylab import mpl
  
  
# 設(shè)置顯示中文字體
  
  
mpl.rcParams["font.sans-serif"] = ["SimHei"]

有時候肚吏,字體更改后吮蛹,會導致坐標軸中的部分字符無法正常顯示荤崇,此時需要更改axes.unicode_minus參數(shù):

  
  
# 設(shè)置正常顯示符號
  
  
mpl.rcParams["axes.unicode_minus"] = False

1.4 添加網(wǎng)格顯示

為了更加清楚地觀察圖形對應的值

plt.grid(True, linestyle='--', alpha=0.5)

1.5 添加描述信息

添加x軸、y軸描述信息及標題

通過fontsize參數(shù)可以修改圖像中字體的大小

plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點0分到12點之間的溫度變化圖示", fontsize=20)

1.6 圖像保存

  
  
# 保存圖片到指定路徑
  
  
plt.savefig("test.png")
  • 注意:plt.show()會釋放figure資源潮针,如果在顯示圖像之后保存圖片將只能保存空圖片术荤。

完整代碼:

import matplotlib.pyplot as plt
import random
from pylab import mpl

  
  
# 設(shè)置顯示中文字體
  
  
mpl.rcParams["font.sans-serif"] = ["SimHei"]
  
  
# 設(shè)置正常顯示符號
  
  
mpl.rcParams["axes.unicode_minus"] = False

  
  
# 0.準備數(shù)據(jù)
  
  
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

  
  
# 1.創(chuàng)建畫布
  
  
plt.figure(figsize=(20, 8), dpi=100)

  
  
# 2.繪制圖像
  
  
plt.plot(x, y_shanghai)

  
  
# 2.1 添加x,y軸刻度
  
  
  
  
# 構(gòu)造x,y軸刻度標簽
  
  
x_ticks_label = ["11點{}分".format(i) for i in x]
y_ticks = range(40)

  
  
# 刻度顯示
  
  
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

  
  
# 2.2 添加網(wǎng)格顯示
  
  
plt.grid(True, linestyle="--", alpha=0.5)

  
  
# 2.3 添加描述信息
  
  
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)

  
  
# 2.4 圖像保存
  
  
plt.savefig("./test.png")

  
  
# 3.圖像顯示
  
  
plt.show()

2 在一個坐標系中繪制多個圖像

2.1 多次plot

需求:再添加一個城市的溫度變化

收集到北京當天溫度變化情況,溫度在1度到3度每篷。怎么去添加另一個在同一坐標系當中的不同圖形瓣戚,其實很簡單只需要再次plot即可,但是需要區(qū)分線條焦读,如下顯示

  
  
# 增加北京的溫度數(shù)據(jù)
  
  
y_beijing = [random.uniform(1, 3) for i in x]

  
  
# 繪制折線圖
  
  
plt.plot(x, y_shanghai)
  
  
# 使用多次plot可以畫多個折線
  
  
plt.plot(x, y_beijing, color='r', linestyle='--')

我們仔細觀察子库,用到了兩個新的地方,一個是對于不同的折線展示效果矗晃,一個是添加圖例仑嗅。

2.2 設(shè)置圖形風格

顏色字符 風格字符
r 紅色 - 實線
g 綠色 - - 虛線
b 藍色 -. 點劃線
w 白色 : 點虛線
c 青色 ' ' 留空、空格
m 洋紅
y 黃色
k 黑色

2.3 顯示圖例

  • 注意:如果只在plt.plot()中設(shè)置label還不能最終顯示出圖例,還需要通過plt.legend()將圖例顯示出來仓技。
  
  
# 繪制折線圖
  
  
plt.plot(x, y_shanghai, label="上海")
  
  
# 使用多次plot可以畫多個折線
  
  
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

  
  
# 顯示圖例
  
  
plt.legend(loc="best")
Location String Location Code
'best' 0
'upper right' 1
'upper left' 2
'lower left' 3
'lower right' 4
'right' 5
'center left' 6
'center right' 7
'lower center' 8
'upper center' 9
'center' 10

完整代碼:

  
  
# 0.準備數(shù)據(jù)
  
  
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

  
  
# 1.創(chuàng)建畫布
  
  
plt.figure(figsize=(20, 8), dpi=100)

  
  
# 2.繪制圖像
  
  
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")

  
  
# 2.1 添加x,y軸刻度
  
  
  
  
# 構(gòu)造x,y軸刻度標簽
  
  
x_ticks_label = ["11點{}分".format(i) for i in x]
y_ticks = range(40)

  
  
# 刻度顯示
  
  
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

  
  
# 2.2 添加網(wǎng)格顯示
  
  
plt.grid(True, linestyle="--", alpha=0.5)

  
  
# 2.3 添加描述信息
  
  
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)

  
  
# 2.4 圖像保存
  
  
plt.savefig("./test.png")

  
  
# 2.5 添加圖例
  
  
plt.legend(loc=0)


  
  
# 3.圖像顯示
  
  
plt.show()

2.4 練一練

練習多次plot流程(從上面復制代碼,到自己電腦,確保每人環(huán)境可以正常運行),

同時明確每個過程執(zhí)行實現(xiàn)的具體效果

3 多個坐標系顯示— plt.subplots(面向?qū)ο蟮漠媹D方法)

如果我們想要將上海和北京的天氣圖顯示在同一個圖的不同坐標系當中鸵贬,效果如下:

image-20190317134820901

可以通過subplots函數(shù)實現(xiàn)(舊的版本中有subplot,使用起來不方便)脖捻,推薦subplots函數(shù)

  • matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 創(chuàng)建一個帶有多個axes(坐標系/繪圖區(qū))的圖
Parameters:    

nrows, ncols : 設(shè)置有幾行幾列坐標系
    int, optional, default: 1, Number of rows/columns of the subplot grid.

Returns:    
fig : 圖對象
axes : 返回相應數(shù)量的坐標系

設(shè)置標題等方法不同:
    set_xticks
    set_yticks
    set_xlabel
    set_ylabel

關(guān)于axes子坐標系的更多方法:參考[

  • 注意:plt.函數(shù)名()相當于面向過程的畫圖方法阔逼,axes.set_方法名()相當于面向?qū)ο蟮漠媹D方法。
  
  
# 0.準備數(shù)據(jù)
  
  
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]

  
  
# 1.創(chuàng)建畫布
  
  
  
  
# plt.figure(figsize=(20, 8), dpi=100)
  
  
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)


  
  
# 2.繪制圖像
  
  
  
  
# plt.plot(x, y_shanghai, label="上海")
  
  
  
  
# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
  
  
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")

  
  
# 2.1 添加x,y軸刻度
  
  
  
  
# 構(gòu)造x,y軸刻度標簽
  
  
x_ticks_label = ["11點{}分".format(i) for i in x]
y_ticks = range(40)

  
  
# 刻度顯示
  
  
  
  
# plt.xticks(x[::5], x_ticks_label[::5])
  
  
  
  
# plt.yticks(y_ticks[::5])
  
  
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])

  
  
# 2.2 添加網(wǎng)格顯示
  
  
  
  
# plt.grid(True, linestyle="--", alpha=0.5)
  
  
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)

  
  
# 2.3 添加描述信息
  
  
  
  
# plt.xlabel("時間")
  
  
  
  
# plt.ylabel("溫度")
  
  
  
  
# plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
  
  
axes[0].set_xlabel("時間")
axes[0].set_ylabel("溫度")
axes[0].set_title("中午11點--12點某城市溫度變化圖", fontsize=20)
axes[1].set_xlabel("時間")
axes[1].set_ylabel("溫度")
axes[1].set_title("中午11點--12點某城市溫度變化圖", fontsize=20)

  
  
# # 2.4 圖像保存
  
  
plt.savefig("./test.png")

  
  
# # 2.5 添加圖例
  
  
  
  
# plt.legend(loc=0)
  
  
axes[0].legend(loc=0)
axes[1].legend(loc=0)


  
  
# 3.圖像顯示
  
  
plt.show()

4 折線圖的應用場景

  • 呈現(xiàn)公司產(chǎn)品(不同區(qū)域)每天活躍用戶數(shù)

  • 呈現(xiàn)app每天下載數(shù)量

  • 呈現(xiàn)產(chǎn)品新功能上線后,用戶點擊次數(shù)隨時間的變化

  • 拓展:畫各種數(shù)學函數(shù)圖像

    • 注意:plt.plot()除了可以畫折線圖地沮,也可以用于畫各種數(shù)學函數(shù)圖像

代碼:

import numpy as np
  
  
# 0.準備數(shù)據(jù)
  
  
x = np.linspace(-10, 10, 1000)
y = np.sin(x)

  
  
# 1.創(chuàng)建畫布
  
  
plt.figure(figsize=(20, 8), dpi=100)

  
  
# 2.繪制函數(shù)圖像
  
  
plt.plot(x, y)
  
  
# 2.1 添加網(wǎng)格顯示
  
  
plt.grid()

  
  
# 3.顯示圖像
  
  
plt.show()

5 小結(jié)

  • 添加x,y軸刻度【知道】

    • plt.xticks()
    • plt.yticks()
    • 注意:在傳遞進去的第一個參數(shù)必須是數(shù)字,不能是字符串,如果是字符串嗎,需要進行替換操作
  • 添加網(wǎng)格顯示【知道】

    • plt.grid(linestyle="--", alpha=0.5)
  • 添加描述信息【知道】

    • plt.xlabel()
    • plt.ylabel()
    • plt.title()
  • 圖像保存【知道】

    • plt.savefig("路徑")
  • 多次plot【了解】

    • 直接進行添加就OK
  • 顯示圖例【知道】

    • plt.legend(loc="best")
    • 注意:一定要在plt.plot()里面設(shè)置一個label,如果不設(shè)置,沒法顯示
  • 多個坐標系顯示【了解】

    • plt.subplots(nrows=, ncols=)
  • 折線圖的應用【知道】

    • 1.應用于觀察數(shù)據(jù)的變化
    • 2.可是畫出一些數(shù)學函數(shù)圖像
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗜浮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诉濒,更是在濱河造成了極大的恐慌周伦,老刑警劉巖夕春,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件未荒,死亡現(xiàn)場離奇詭異,居然都是意外死亡及志,警方通過查閱死者的電腦和手機片排,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來速侈,“玉大人率寡,你說我怎么就攤上這事∫邪幔” “怎么了冶共?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長每界。 經(jīng)常有香客問我捅僵,道長,這世上最難降的妖魔是什么眨层? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任庙楚,我火速辦了婚禮,結(jié)果婚禮上趴樱,老公的妹妹穿的比我還像新娘馒闷。我一直安慰自己,他們只是感情好叁征,可當我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布纳账。 她就那樣靜靜地躺著,像睡著了一般捺疼。 火紅的嫁衣襯著肌膚如雪塞祈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天,我揣著相機與錄音议薪,去河邊找鬼尤蛮。 笑死,一個胖子當著我的面吹牛斯议,可吹牛的內(nèi)容都是我干的产捞。 我是一名探鬼主播,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼哼御,長吁一口氣:“原來是場噩夢啊……” “哼坯临!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恋昼,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤看靠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后液肌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挟炬,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年嗦哆,在試婚紗的時候發(fā)現(xiàn)自己被綠了谤祖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡老速,死狀恐怖粥喜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情橘券,我是刑警寧澤额湘,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站旁舰,受9級特大地震影響锋华,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鬓梅,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一供置、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绽快,春花似錦芥丧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背规哲。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工询兴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乃沙,地道東北人。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓诗舰,卻偏偏與公主長得像警儒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子眶根,可洞房花燭夜當晚...
    茶點故事閱讀 43,606評論 2 350

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