第91天:Python matplotlib introduction

by 潮汐

今天我們一起來探究 Python 中一個很有趣的模塊--Matplotlib,Matplotlib 是一個非常優秀的 Python 2D 繪圖庫,只要給出符合格式的數據,通過 Matplotlib 就可以方便地製作數據圖。

一、初識 Matplotlib

  • Matplotlib 以多種硬拷貝格式和跨平臺的交互式環境生成出版物質量的圖形。Matplotlib 可用於 IPython 腳本,Python 和 IPython Shell,Jupyter 筆記本,Web應用程序服務器和四個圖形用戶界面工具包。
  • Matplotlib 嘗試使容易的事情變得容易,使困難的事情變得可能。在實踐過程中只需幾行代碼就可以生成圖表,比如直方圖、功率譜、條形圖、誤差圖、散點圖等。

示例圖

示例圖

1、 IPython

IPython 是 Python 的一個增強版本。它在下列方面有所增強:命名輸入輸出、使用系統命令(shell commands)、排錯(debug)能力。我們在命令行終端給 IPython 加上參數 -pylab (0.12 以後的版本是 --pylab)之後,就可以像 Matlab 或者 Mathematica 那樣以交互的方式繪圖。

2、pylab

pylab 是 matplotlib 面向對象繪圖庫的一個接口。它的語法和 Matlab 十分相近。也就是說,它主要的繪圖命令和 Matlab 對應的命令有相似的參數。

二、 安裝

在線安裝

安裝 Matplotlib 包與安裝其他 Python 包一樣,都可以使用 pip 來安裝。
啓動命令行窗口,在命令行窗口中輸入如下命令:

pip3 install matplotlib

輸入上面的命令後會自動下載安裝 Matplotlib 包的最新版本。下載完成後會安裝,最後提示 Matplotlib 包安裝成功:

Installing collected packages: matplotlib
Successfully installed matplotlib-3.1.1

離線安裝

在有網絡限制條件下我們需要下載離線包來安裝,python matplotlib 離線安裝需要提前下載好與 python 版本對應的 wheel 安裝包,下載地址

安裝包圖片

在上圖中選擇相應的安裝包下載即可,cp36 表示 python 是 3.6 版本,同樣的 cp37 表示 python 是3.7 版本,同樣可以在 python 命令行下使用一下命令查看支持的版本屬性:

>>>python
>>> import pip._internal
>>> print(pip._internal.pep425tags.get_supported())

安裝包支持版本

以上結果可以顯示出相應的版本支持,下載好後 使用 pip命令安裝即可成功:

pip install matplotlib-3.1.1-cp36-cp36m-manylinux1_x86_64.whl

三、matplotlib 架構

1、matplotlib 架構圖

matplotlib 架構圖

matplotlib 框架分爲三層,這三層構成了一個棧,上層可以調用下層,三層框架描述如下:

  • 腳本層 (pyplot):簡化了完成數據分析與可視化的常規操作。 管理創建圖形、座標軸以及他們與後端層的連接。
  • 藝術家層 (artist):管理漂亮圖形背後的大多數內部活動。
  • 後端層 (backend):matplotlib 的底層,實現了大量的抽象接口類;還和用戶界面工具箱整合在一起;可以將圖形保存爲不同格式(比如PDF、PNG、PS和SVG等)。

這三層屬於matplotlib程序包的範疇,腳本層(pytplot模塊)可以提供給我們一個與matplotlib打交道的接口,我們可以只通過調用pyplot模塊的函數從而操作整個程序包,來繪製圖形。

2、matplotlib 編程接口

matplotlib 編程接口由 3 層組成,組成描述如下:

  • 第一層狀態機環境,是由 pyplot 提供的。
  • 第二層是有 pyplot 和麪向對象(oo)接口提供,由 pyplot 獲取 figure 對象,通過面向對象接口來顯示地管理axies 對象。
  • 第三層由面向對象(oo)接口提供,該層完全不使用 pyplot 模塊。

編程接口圖:

編程接口圖

四、matplotlib 繪圖概念

1、 繪圖方式

在matplotlib庫裏,總分成兩種繪圖方式

  • 方法一:函數式繪圖

繪圖方法通過調用一系列函數傳入數據繪製出相應的圖,
在 matplotlib.pyplot 裏是封裝好的函數,用戶可以直接調用函數進行繪圖。
一般的,我們約定 matplotlib.pyplot 取別名爲 plt

其模塊下主要定義如下兩方面的函數:

操作類的函數:對於畫布,圖,子圖,座標軸,圖例,背景,網格等的操作。
如:
plt.ylabel(), plt.xlabel(), plot.yscale(), plt.legend(), plt.title(), plt.text()等

繪圖類的函數:畫折線圖,散點圖,條形圖,直方圖,餅狀圖等特點圖的繪製函數。
如:
plt.scatter, plt.plot(), plt.bar, plot.pie(), plt.hise()……

繪圖部分函數如下:

序號 繪圖函數(plt.xxx) 說明
1 acorr() 繪製x的自相關圖
2 angle_spectrum()
3 bar() 製作條形圖
4 barbs() 繪製倒鉤的二維場圖
5 barh() 製作水平條形圖
6 boxplot() 製作一個盒子和鬍鬚圖
7 broken_barh() 繪製一個水平的矩形序列圖
8 clabel() 繪製等高線圖
9 cohere() 繪製x和y之間的一致性圖
10 csd() 繪製交叉譜密度圖
11 eventplot() 繪製相同的平行線
12 fill() 繪製填充多邊形圖
13 hexbin() 製作六邊形分箱圖
14 hist() 繪製直方圖
15 hist2d() 製作2D直方圖
16 magnitude_spectrum() 繪製幅度譜圖
17 phase_spectrum() 繪製相位譜圖
18 pie() 繪製餅圖
19 plot() 繪製折線圖
20 plot_date() 繪製包含日期的數據圖
21 quiver() 繪製一個二維箭頭場圖
22 scatter() 繪製散點圖
23 specgram() 繪製頻譜圖
24 stackplot() 繪製堆積區域圖
25 streamplot() 繪製矢量流的流線型圖
26 triplot() 繪製非結構化三角形網格作爲線條圖
  • 方法二:面向對象式繪圖

面向對象式的繪圖,纔是matplotlib繪圖最自然的方式

下圖是 matplotlib 基本的組成部分

matplotlib 繪圖概念描述

元素描述:

元素 描述
figure 圖形
axes 子圖形
title 標題
legend 圖例
Major tick( 大標尺刻度
Minor tick 小標尺刻度
Major tick label( 大標尺刻度數值
Minor tick label 小標尺刻度數值
Y axis label y軸指標說明
X axis label x軸指標說明
Line 線型圖)
Markers 數據標註點
Grid 格子

基本對象描述如下:

  1. Figure(圖)

指整個圖形(包括所有的元素,比如標題、線等)。 管理着所有的座標系,還有一些特殊的藝術家和canvas(畫布)。

  • 整個圖形即是一個Figure對象,即一個彈出的繪圖的窗口,便是一個figure。
  • Figure對象至少包含一個子圖,也就是Axes對象。
  • Figure對象包含一些特殊的Artist對象,如title標題、圖例legend。
  • Figure對象包含畫布canvas對象。 canvas對象一般不可見,通常無需直接操作該對象,matplotlib程序實際繪圖時需要調用該對象。
  1. Axes(座標系)

數據的繪圖區域

  • 字面上理解,axes是數據軸axis的複數,但它並不是指數據軸,而是子圖對象。可以這樣理解,每一個子圖都有x和y軸,axes則用於代表這兩個數據軸所對應的一個子圖對象。
    -常用方法set_xlim()以及set_ylim():
    • 設置子圖x軸和y軸對應的數據範圍。
    • set_title():設置子圖的標題。
    • set_xlabel()以及set_ylable():
    • 設置子圖x軸和y軸指標的描述說明。
  1. Axis(座標軸)

座標系中的一條軸,包含大小限制、刻度和刻度標籤。

  • Axis是數據軸對象,主要用於控制數據軸上刻度位置和顯示數值。
  • Axis有Locator和Formatter兩個子對象,分別用於控制刻度位置和顯示數值。
  1. artist(藝術家)

圖中所有的對象都是artis,當圖形顯示時,所有的藝術家都會被繪製到畫布上。

  • 基本上所有的對象都是一個Artist對象,包括Figure對象、Axes對象和Axis對象,可以將Artist理解爲一個基本類。
  • 當提交代碼,圖像最終呈現時,所有的artist對象都會繪製於canvas畫布上

值得注意的是:

  • 一個figure(圖)可以包含多個axes(座標系),但是一個axes只能屬於一個figure。
  • 一個axes(座標系)可以包含多個axis(座標軸),包含兩個即爲2d座標系,3個即爲3d座標系

繪圖之間的層級結構如下:

層級結構圖

3、繪圖步驟

在現實生活中,如果我們要畫一幅畫,首先需要什麼工具呢?

  1. 首先咱們需要一個畫板
  2. 其次還需要一張畫布
  3. 指定大致輪廓(軸),軸是繪畫的基準
  4. 最後是畫畫工具(畫筆…)

而使用 Matplotlib 畫圖同樣如此,首先需要指定一個畫板,再指定一張畫布,然後再指定元素開始作畫。

例如:

import matplotlib.pyplot as plt
# 指定一個畫板
fig = plt.figure()
# 指定畫板後指定軸
# ax = fig.add_subplot(111)
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(224)
ax4 = fig.add_subplot(223)
# 設置軸的位置
# ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',
#        ylabel='Y-Axis', xlabel='X-Axis')
plt.show()

運行結果如下:

運行結果圖

3、matplotlib 重要模塊 pyplot 詳解

matplotlib.pytplot包含了一系列類似於matlab的畫圖函數。 它的函數作用於當前圖形(figure)的當前座標系(axes)。

3.1 導入模塊

import matplotlib.pyplot as plt

3.2 運用模塊

導入模塊後,調用相應函數,例如

plot(xdata,ydata,format)

函數參數:

  • xdata:所有點的x座標,如果不傳默認是[0:]。
  • ydata:所有點的y座標。
  • format:繪製的格式,默認是’b-‘。比如’b-+’:分別代表顏色、線形和標記。
    • 顏色:繪製的顏色(b指blue,藍色)。
    • 線性:點之間的連線樣式(-指實線)。
    • 標記:點的風格(+爲加號)。

例如:

import matplotlib.pyplot as plt
plt.plot([1,2],[1,2],'r--+')
plt.show()

運行結果爲:

運行結果圖

再例如一個簡單的折線圖如下:

import matplotlib.pyplot as plt

x = (1,3,5,9,13)

y = (2,5,9,12,28)

# 調用繪製方法
# 設置線條屬性
# linewidth屬性設置線條的寬度
plt.plot(x,y,linewidth = 5)

# 顯示圖片
plt.show()

運行結果:
運行結果圖

除了設置這些屬性以外,圖形還可以設置其他屬性,這些概念我們將在下一節文章中作詳細的講解。

總結

凡事預則立,學習任何一門知識也得從最基本開始,本章節對 matplotlib 模塊做了詳細的概念描述,在接下來的的章節中將結合 NumPy 模塊進行實戰性演練,以此對初入門的夥伴們做更好的支撐。

參考

https://blog.csdn.net/hekind/article/details/79542040
https://matplotlib.org/3.1.1/contents.html
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html?highlight=matplotlib pyplot#module-matplotlib.pyplot

文中示例代碼:python-100-days

關注公衆號:python技術,回覆"python"一起學習交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章