Matplotlib 系列之【繪製函數圖像】

matplotlib 是 python 最著名的繪圖庫,它提供了一整套和 matlab 類似的命令 API,十分適合交互式進行繪圖。html

它的文檔至關完備,而且 Gallery 頁面 中有上百幅縮略圖,打開以後都有源程序。所以若是你須要繪製某種類型的圖,只須要在這個頁面中瀏覽/複製/粘貼一下,基本上都能搞定。python

這是要實現的效果圖,利用 Matplotlib 繪製函數 y = x^2^ 的圖像。git

image

代碼實現

import matplotlib.pyplot as plt
import numpy as np

# 定義 x 變量的範圍 (-3,3) 數量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 並指定大小
plt.figure(num=3,figsize=(8,5))
# 繪製 y=x^2 的圖像,設置 color 爲 red,線寬度是 1,線的樣式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 設置 x,y 軸的範圍以及 label 標註
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

# 設置座標軸刻度線 
# Tick X 範圍 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度數量 5 個
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 範圍(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 別名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])


# 設置座標軸 gca() 獲取座標軸信息
ax=plt.gca()
# 使用.spines設置邊框:x軸;將右邊顏色設置爲 none。
# 使用.set_position設置邊框位置:y=0的位置;(位置全部屬性:outward,axes,data)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 移動座標軸
# 將 bottom 便是 x 座標軸設置到 y=0 的位置。
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))

# 將 left 便是 y 座標軸設置到 x=0 的位置。
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

# 設置標籤
ax.set_title('y = x^2',fontsize=14,color='r')

# 顯示圖像
plt.show()
複製代碼

首先一幅 Matplotlib 的圖像組成部分介紹。github

image

基本構成

在 matplotlib 中,整個圖像爲一個 Figure 對象。在 Figure 對象中能夠包含一個或者多個 Axes 對象。每一個 Axes(ax) 對象都是一個擁有本身座標系統的繪圖區域。算法

所屬關係以下(圖片來自網絡):編程

image

圖上:Title 爲圖像標題,Axis 爲座標軸, Label 爲座標軸標註,Tick 爲刻度線,Tick Label 爲刻度註釋。bash

各個對象關係能夠梳理成如下內容(圖片來自網絡):網絡

image

Matplotlib 繪圖步驟分析

image

注意框架

這裏不講解 matplotlib 的安裝,我使用的是 Anaconda 的 notebook,所以,能夠直接導入 matplotlib 的module,想要安裝 Anaconda 的請查看的寫的另外一篇文章。機器學習

若是說不想使用 Anaconda,能夠看看這篇推薦文章,教你如何安裝 matplotlib(視頻和文章教程)— 莫煩 Python -- Matplotlib

上面雖然貼了所有的代碼,有 matplotlib 基礎的人一看便懂,可是對於初學者來講,就比較抓腦了。

1、matplotlib 實現簡單圖像

image

使用 import 導入模塊 matplotlib.pyplot,並簡寫成 plt  使用 import 導入模塊 numpy,並簡寫成 np

#導入 module
import matplotlib.pyplot as plt
import numpy as np
複製代碼

使用 np.linspace 定義 x:範圍是 (-3,3),個數是50,仿真一維數據組 (x ,y) 表示曲線。

# 定義 x 變量的範圍 (-3,3) 數量 50 
x=np.linspace(-3,3,50)
y=x**2
複製代碼

使用 plt.figure 定義一個圖像窗口,使用 plt.plot 畫 (x ,y) 曲線,使用 plt.show 顯示圖像。

#繪製及顯示
plt.figure()
plt.plot(x, y)
plt.show()
複製代碼

最終代碼

import matplotlib.pyplot as plt
import numpy as np

# 定義 x 變量的範圍 (-3,3) 數量 50 
x=np.linspace(-3,3,50)
y=x**2

plt.figure()
plt.plot(x, y)
plt.show()
複製代碼

運行結果

image

看到這個,是否是和最終效果圖差距很大,不要緊,咱們接着往下看。

2、設置 Figure 圖像

使用 plt.figure 定義一個圖像窗口:編號爲 3,大小爲 (8, 5)。使用plt.plot畫(x ,y)曲線,曲線的顏色屬性(color)爲紅色。曲線的寬度(linewidth)爲1.0。曲線的類型(linestyle)爲虛線, 使用plt.show顯示圖像。

plt.figure(num=3,figsize=(8,5))
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')
複製代碼

最終代碼

import matplotlib.pyplot as plt
import numpy as np

# 定義 x 變量的範圍 (-3,3) 數量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 並指定大小
plt.figure(num=3,figsize=(8,5))
# 繪製 y=x^2 的圖像,設置 color 爲 red,線寬度是 1,線的樣式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

plt.show()
複製代碼

運行效果

image

3、設置座標軸

設置 x,y 軸座標範圍及標註 label

使用 plt.xlim 設置x座標軸範圍:(-1, 2); 使用 plt.ylim 設置 y 座標軸範圍:(-2, 3);

使用 plt.xlabel 設置 x 座標軸名稱:’x’; 使用 plt.ylabel 設置 y 座標軸名稱:’I am y’;

代碼實現

import matplotlib.pyplot as plt
import numpy as np

# 定義 x 變量的範圍 (-3,3) 數量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 並指定大小
plt.figure(num=3,figsize=(8,5))
# 繪製 y=x^2 的圖像,設置 color 爲 red,線寬度是 1,線的樣式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 設置 x,y 軸的範圍以及 label 標註
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

plt.show()
複製代碼

運行結果

image

設置 x, y 刻度範圍及刻度標註

設置 x 軸 使用 np.linspace 定義範圍以及個數:範圍是(-1,2); 個數是 5。

使用 plt.xticks 設置 x 軸刻度:範圍是(-1,2); 個數是5。

設置 y 軸 使用 plt.yticks 設置 y 軸刻度以及名稱:刻度爲 [-2, -1.8, -1, 1.22, 3];對應刻度的名稱爲 [‘really bad’,’bad’,’normal’,’good’, ‘really good’]。

# 設置座標軸刻度線 
# Tick X 範圍 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度數量 5 個
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 範圍(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 別名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])
複製代碼

最終代碼

import matplotlib.pyplot as plt
import numpy as np

# 定義 x 變量的範圍 (-3,3) 數量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 並指定大小
plt.figure(num=3,figsize=(8,5))
# 繪製 y=x^2 的圖像,設置 color 爲 red,線寬度是 1,線的樣式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 設置 x,y 軸的範圍以及 label 標註
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

# 設置座標軸刻度線 
# Tick X 範圍 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度數量 5 個
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 範圍(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 別名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])

# 顯示圖像
plt.show()
複製代碼

運行效果,注意看 x, y 軸刻度以及標註變化

image

4、移動座標軸

隱藏右邊框和上邊框

  1. 使用 plt.gca 獲取當前座標軸信息。

  2. 使用 .spines 設置邊框:右側邊框;使用.set_color設置邊框顏色:默認白色;

    使用 .spines 設置邊框:上邊框;使用.set_color設置邊框顏色:默認白色;

調整座標軸至中心(將 left 邊框調整到 x=0 處,將 bottom 邊框調整到 y=0 處)

  1. 使用 .xaxis.set_ticks_position 設置 x 座標刻度數字或名稱的位置:bottom。(全部位置:topbottombothdefaultnone)。
  2. 使用 .spines 設置邊框:x 軸;使用 .set_position設置邊框位置:y=0 的位置;(位置全部屬性:outwardaxesdata
# 設置座標軸 gca() 獲取座標軸信息
ax=plt.gca()
# 使用.spines設置邊框:x軸;將右邊顏色設置爲 none。
# 使用.set_position設置邊框位置:y=0的位置;(位置全部屬性:outward,axes,data)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 移動座標軸
# 將 bottom 便是 x 座標軸設置到 y=0 的位置。
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))

# 將 left 便是 y 座標軸設置到 x=0 的位置。
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
複製代碼

最終代碼

import matplotlib.pyplot as plt
import numpy as np

# 定義 x 變量的範圍 (-3,3) 數量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 並指定大小
plt.figure(num=3,figsize=(8,5))
# 繪製 y=x^2 的圖像,設置 color 爲 red,線寬度是 1,線的樣式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 設置 x,y 軸的範圍以及 label 標註
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

# 設置座標軸刻度線 
# Tick X 範圍 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度數量 5 個
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 範圍(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 別名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])

# 設置座標軸 gca() 獲取座標軸信息
ax=plt.gca()
# 使用.spines設置邊框:x軸;將右邊顏色設置爲 none。
# 使用.set_position設置邊框位置:y=0的位置;(位置全部屬性:outward,axes,data)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 移動座標軸
# 將 bottom 便是 x 座標軸設置到 y=0 的位置。
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))

# 將 left 便是 y 座標軸設置到 x=0 的位置。
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

# 顯示圖像
plt.show()
複製代碼

運行結果

image

5、設置標題

使用 .set_title 設置標題,聲明標題爲 y = x^2^,字體大小 14,顏色爲 red。

# 設置標籤
ax.set_title('y = x^2',fontsize=14,color='r')
複製代碼

最終代碼

import matplotlib.pyplot as plt
import numpy as np

# 定義 x 變量的範圍 (-3,3) 數量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 並指定大小
plt.figure(num=3,figsize=(8,5))
# 繪製 y=x^2 的圖像,設置 color 爲 red,線寬度是 1,線的樣式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 設置 x,y 軸的範圍以及 label 標註
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

# 設置座標軸刻度線 
# Tick X 範圍 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度數量 5 個
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 範圍(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 別名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])


# 設置座標軸 gca() 獲取座標軸信息
ax=plt.gca()
# 使用.spines設置邊框:x軸;將右邊顏色設置爲 none。
# 使用.set_position設置邊框位置:y=0的位置;(位置全部屬性:outward,axes,data)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 移動座標軸
# 將 bottom 便是 x 座標軸設置到 y=0 的位置。
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))

# 將 left 便是 y 座標軸設置到 x=0 的位置。
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

# 設置標籤
ax.set_title('y = x^2',fontsize=14,color='r')

# 顯示圖像
plt.show()
複製代碼

運行結果

image

最後,附上 matplotlib 總體結構圖(圖片來自網絡):

image

推薦閱讀

來北京的日子

這麼多年都白學了,原來是方法沒有用對

貝斯狸的 Python 之旅 -- 深刻切片操做及原理

牆裂推薦 Anaconda | 安利 Python IDE

編程界的半壁江山

好書推薦

統計學習方法

最近正在研究機器學習中的算法和公式,朋友給我推薦了這本書,通過一番考察,總算是以爲這本書對得起讀者,也值得推薦。

李航,日本京都大學電氣工程系畢業,日本東京大學計算機科學博士。曾任職於日本 NEC 公司中央研究所,微軟亞洲研究院高級研究員及主任研究員,現任華爲諾亞方舟實驗室首席科學家。北京大學、南開大學、西安交通大學客座教授。研究方向包括信息檢索、天然語言處理、統計機器學習及數據挖掘。

豆瓣簡介

詳細介紹支持向量機、Boosting、最大熵、條件隨機場等十個統計學習方法。

image

思惟力:高效的系統思惟

王世民,深圳爾雅 CEO,YouCore 創始人,知乎專欄「框架的力量」做者。

一個矛盾體。內心挺鄙視學歷,但不當心念了名校、拿了碩士;崇尚我的自由,但又創辦公司綁死了本身;特不喜歡教書,但如今幹着培訓。一個不安分的人。短短十來年,當過苦逼的IT碼農、作過裝逼的諮詢顧問、如今幹着土鱉的民企老闆。

這本書對個人思惟能力提高幫助蠻大的,書中提供的不少學習方法都值得借鑑,自從閱讀了本書之後,我也喜歡畫腦圖總結,不斷嘗試系統學習。我強烈建議讀者們去看看【框架的力量】的專欄,對提升你的思惟和學習效率頗有幫助。

豆瓣簡介

「真正有用」正是這本書不一樣於其它思惟書籍之處!

你有沒有遇到過如下窘境——分析時想不明白、表達時說不清楚、學習時學不快速?你想不想全面提高你的思惟能力?你知道問題解決技巧和表達技巧有哪些嗎?

此書中有你想知道的答案。

本書分爲 3 個部分共 10 章,各章可自成體系地解決一個問題,同時整書又造成一套體系化的系統思惟。

第一部分探祕了「框架」力量的根源。萬事萬物的本質實際上是一個個的系統,而掌握了系統的「框架」也就把握了事物的本質。沒有什麼問題是不能利用框架解決的,若是一個不行,那就兩個。

第二部分將運用「框架」解決問題分解爲五個步驟——界定問題、構建框架、明晰關鍵、高效執行及檢查調整,並精煉了相應的優秀思考方法和工具。此外,還傳授了在有限時間、有限資源限制下高質量地解決問題的祕訣——「假設思考」。

第三部分傳授如何運用「框架」有效表達。逐層遞進地演示了自上而下表達的魅力,並用豐富的圖表闡述了何爲「形象化表達」。

對於想全面提高思惟能力的讀者,建議按照本書章節順序閱讀;對於迫切想尋求具體問題解決技巧或表達技巧的讀者,也能夠直接閱讀相應章節。

image

想要書籍的請在後臺留言【180803】獲取這兩本書的 PDF 版,【思惟力:高效的系統思惟】附視頻教程,但願在學習的道路上,咱們能少走彎路,我會盡可能推薦本身讀過的好書,但願讀者們能跟着我一塊兒多讀書,讀好書。

image
相關文章
相關標籤/搜索