matplotlib 是 python 最著名的繪相簿,它提供了一整套和 matlab 相似的命令 API,十分適合互動式進行繪圖。
它的文件相當完備,並且 Gallery 頁面 中有上百幅縮圖,開啟之後都有源程式。因此如果你需要繪製某種型別的圖,只需要在這個頁面中瀏覽/複製/貼上一下,基本上都能搞定。
這是要實現的效果圖,利用 Matplotlib 繪製函式 y = x^2^ 的影像。
程式碼實現
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 的影像組成部分介紹。
基本構成
在 matplotlib 中,整個影像為一個 Figure 物件。在 Figure 物件中可以包含一個或者多個 Axes 物件。每個 Axes(ax) 物件都是一個擁有自己座標系統的繪圖區域。
所屬關係如下(圖片來自網路):
圖上:Title 為影像標題,Axis 為座標軸, Label 為座標軸標註,Tick 為刻度線,Tick Label 為刻度註釋。
各個物件關係可以梳理成以下內容(圖片來自網路):
Matplotlib 繪圖步驟分析
注意
這裡不講解 matplotlib 的安裝,我使用的是 Anaconda 的 notebook,因此,可以直接匯入 matplotlib 的module,想要安裝 Anaconda 的請檢視的寫的另一篇文章。
如果說不想使用 Anaconda,可以看看這篇推薦文章,教你如何安裝 matplotlib(視訊和文章教程)— 莫煩 Python — Matplotlib
上面雖然貼了全部的程式碼,有 matplotlib 基礎的人一看便懂,但是對於初學者來說,就比較抓腦了。
一、matplotlib 實現簡單影像
使用 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()
複製程式碼
執行結果
看到這個,是不是和最終效果圖差距很大,沒關係,我們接著往下看。
二、設定 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()
複製程式碼
執行效果
三、設定座標軸
設定 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()
複製程式碼
執行結果
設定 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 軸刻度以及標註變化
四、移動座標軸
隱藏右邊框和上邊框
-
使用
plt.gca
獲取當前座標軸資訊。 -
使用
.spines
設定邊框:右側邊框;使用.set_color
設定邊框顏色:預設白色;使用
.spines
設定邊框:上邊框;使用.set_color
設定邊框顏色:預設白色;
調整座標軸至中心(將 left 邊框調整到 x=0 處,將 bottom 邊框調整到 y=0 處)
- 使用
.xaxis.set_ticks_position
設定 x 座標刻度數字或名稱的位置:bottom
。(所有位置:top
,bottom
,both
,default
,none
)。 - 使用
.spines
設定邊框:x 軸;使用.set_position
設定邊框位置:y=0 的位置;(位置所有屬性:outward
,axes
,data
)
# 設定座標軸 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()
複製程式碼
執行結果
五、設定標題
使用 .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()
複製程式碼
執行結果
最後,附上 matplotlib 整體結構圖(圖片來自網路):
推薦閱讀
好書推薦
統計學習方法
最近正在研究機器學習中的演算法和公式,朋友給我推薦了這本書,經過一番考察,總算是覺得這本書對得起讀者,也值得推薦。
李航,日本京都大學電氣工程系畢業,日本東京大學電腦科學博士。曾任職於日本 NEC 公司中央研究所,微軟亞洲研究院高階研究員及主任研究員,現任華為諾亞方舟實驗室首席科學家。北京大學、南開大學、西安交通大學客座教授。研究方向包括資訊檢索、自然語言處理、統計機器學習及資料探勘。
豆瓣簡介
詳細介紹支援向量機、Boosting、最大熵、條件隨機場等十個統計學習方法。
思維力:高效的系統思維
王世民,深圳爾雅 CEO,YouCore 創始人,知乎專欄“框架的力量”作者。
一個矛盾體。心裡挺鄙視學歷,但不小心念了名校、拿了碩士;崇尚個人自由,但又創辦公司綁死了自己;特不喜歡教書,但現在幹著培訓。一個不安分的人。短短十來年,當過苦逼的IT碼農、做過裝逼的諮詢顧問、現在幹著土鱉的民企老闆。
這本書對我的思維能力提升幫助蠻大的,書中提供的很多學習方法都值得借鑑,自從閱讀了本書以後,我也喜歡畫腦圖總結,不斷嘗試系統學習。我強烈建議讀者們去看看【框架的力量】的專欄,對提高你的思維和學習效率很有幫助。
豆瓣簡介
“真正有用”正是這本書不同於其它思維書籍之處!
你有沒有遇到過以下窘境——分析時想不明白、表達時說不清楚、學習時學不快速?你想不想全面提升你的思維能力?你知道問題解決技巧和表達技巧有哪些嗎?
此書中有你想知道的答案。
本書分為 3 個部分共 10 章,各章可自成體系地解決一個問題,同時整書又形成一套體系化的系統思維。
第一部分探祕了“框架”力量的根源。萬事萬物的本質其實是一個個的系統,而掌握了系統的“框架”也就把握了事物的本質。沒有什麼問題是不能利用框架解決的,如果一個不行,那就兩個。
第二部分將運用“框架”解決問題分解為五個步驟——界定問題、構建框架、明晰關鍵、高效執行及檢查調整,並精煉了相應的優秀思考方法和工具。此外,還傳授了在有限時間、有限資源限制下高質量地解決問題的祕訣——“假設思考”。
第三部分傳授如何運用“框架”有效表達。逐層遞進地演示了自上而下表達的魅力,並用豐富的圖表闡述了何為“形象化表達”。
對於想全面提升思維能力的讀者,建議按照本書章節順序閱讀;對於迫切想尋求具體問題解決技巧或表達技巧的讀者,也可以直接閱讀相應章節。
想要書籍的請在後臺留言【180803】獲取這兩本書的 PDF 版,【思維力:高效的系統思維】附視訊教程,希望在學習的道路上,我們能少走彎路,我會盡量推薦自己讀過的好書,希望讀者們能跟著我一起多讀書,讀好書。