Python實操:手把手教你用Matplotlib把數據畫出來

2021-02-20 腳本之家

作者:麥可·貝耶勒(Michael Beyeler)

如需轉載請聯繫大數據(ID:hzdashuju)

01 引入 Matplotlib

如果已安裝Anaconda Python版本,就已經安裝好了可以使用的 Matplotlib。否則,可能要訪問官網並從中獲取安裝說明:

http://matplotlib.org

正如使用np作為 NumPy 的縮寫,我們將使用一些標準的縮寫來表示 Matplotlib 的引入:

In [1]: import matplotlib as mpl
In [2]: import matplotlib.pyplot as plt

在本書中,plt接口會被頻繁使用。

02 生成一個簡單的繪圖

讓我們創建第一個繪圖。

假設想要畫出正弦函數sin(x)的線性圖。得到函數在x坐標軸上0≤x<10內所有點的值。我們將使用 NumPy 中的 linspace 函數來在x坐標軸上創建一個從0到10的線性空間,以及100個採樣點:

In [3]: import numpy as np
In [4]: x = np.linspace(0, 10, 100)

可以使用 NumPy 中的sin函數得到所有x點的值,並通過調用plt中的plot函數把結果畫出來:

In [5]: plt.plot(x, np.sin(x))

你親自嘗試了嗎?發生了什麼嗎?有沒有什麼東西出現?

實際情況是,取決於你在哪裡運行腳本,可能無法看到任何東西。有下面幾種可能性:

1. 從.py腳本中繪圖

如果從一個腳本中運行 Matplotlib,需要加上下面的這行調用:

在腳本末尾調用這個函數,你的繪圖就會出現!

2. 從 IPython shell 中繪圖

這實際上是交互式地執行Matplotlib最方便的方式。為了讓繪圖出現,需要在啟動 IPython 後使用所謂的%matplotlib魔法命令。

In [1]: %matplotlib
Using matplotlib backend: TkAgg
In [2]: import matplotlib.pyplot as plt

接下來,無須每次調用plt.show()函數,所有的繪圖將會自動出現。

3. 從 Jupyter Notebook 中繪圖

如果你是從基於瀏覽器的 Jupyter Notebook 中看這段代碼,需要使用同樣的%matplotlib魔法命令。然而,也可以直接在notebook中嵌入圖形,這會有兩種輸出選項:

在本書中,將會使用inline選項:

In [6]: %matplotlib inline

現在再次嘗試一下:

In [7]: plt.plot(x, np.sin(x))
Out[7]: [<matplotlib.lines.Line2D at 0x7f3aac426eb8>]

上面的命令會得到下面的繪圖輸出結果:

▲使用 Matplotlib 繪製正弦函數圖像

如果想要把繪圖保存下來留作以後使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:

In [8]: plt.savefig('figures/02.03-sine.png')

僅需要確保你使用了支持的文件後綴,比如.jpg、.png、.tif、.svg、.eps或者.pdf。

Tips:可以在引入Matplotlib後通過運行plt.style.use(style_name)來修改繪圖的風格。所有可用的風格在plt.style.available中列出。比如,嘗試使用plt.style.use('fivethirtyeight')、plt.style.use('ggplot')或者plt.style.use('seaborn-dark')。為了更好玩,可以運行plt.xkcd(),然後嘗試繪製一些別的圖形。

03 可視化外部數據集的數據

作為本章最後一個測試,讓我們對外部數據集進行可視化,比如scikit-learn中的數字數據集。

為此,需要三個可視化工具:

scikit-learn用於獲取實際數據

NumPy 用於數據再加工

Matplotlib

那麼開始引入這些包吧:

In [1]: import numpy as np
...     from sklearn import datasets
...     import matplotlib.pyplot as plt
...     % matplotlib inline

第一步是載入實際數據:

In [2]: digits = datasets.load_digits()

如果沒記錯的話,digits應該有兩個不同的數據域:data域包含了真正的圖像數據,target域包含了圖像的標籤。相對於相信我們的記憶,我們還是應該對digits稍加探索。輸入它的名字,添加一個點號,然後按Tab鍵:digits.<TAB>,這個操作將向我們展示digits也包含了一些其他的域,比如一個名為images的域。images和data這兩個域,似乎簡單從形狀上就可以區分。

In [3]: print(digits.data.shape)
...     print(digits.images.shape)
Out[3]: (1797, 64)
...     (1797, 8, 8)

兩種情況中,第一維對應的都是數據集中的圖像數量。然而,data中所有像素都在一個大的向量中排列,而images保留了各個圖像8×8的空間排列。

因此,如果想要繪製出一副單獨的圖像,使用images將更加合適。首先,使用NumPy的數組切片從數據集中獲取一幅圖像:

In [4]: img = digits.images[0, :, :]

這裡是從1797個元素的數組中獲取了它的第一行數據,這行數據對應的是8×8=64個像素。下面就可以使用plt中的imshow函數來繪製這幅圖像:

In [5]: plt.imshow(img, cmap='gray')
Out[5]: <matplotlib.image.AxesImage at 0x7efcd27f30f0>

上面的命令得到下面的輸出:

▲數字數據集中的一個圖像樣例

此外,這裡也使用cmap參數指定了一個顏色映射。默認情況下,Matplotlib 使用MATLAB默認的顏色映射jet。然而,在灰度圖像的情況下,gray顏色映射更有效。

最後,可以使用plt的subplot函數繪製全部數字的樣例。subplot函數與MATLAB中的函數一樣,需要指定行數、列數以及當前的子繪圖索引(從1開始計算)。我們將使用for 循環在數據集中迭代出前十張圖像,每張圖像都分配到一個單獨的子繪圖中。

In [6]: for image_index in range(10):
...         
...         subplot_index = image_index + 1
...         plt.subplot(2, 5, subplot_index)
...         plt.imshow(digits.images[image_index, :, :], cmap='gray')

這會得到下面的輸出結果:

▲數字數據集中的十幅樣例圖像

Tips:另一個擁有各種數據集資源的是我的母校——加利福尼亞大學歐文分校的機器學習倉庫:

http://archive.ics.uci.edu/ml

相關焦點

  • python使用matplotlib畫動態圖
    matplotlib是python的核心繪圖庫,是python的一個開源項目,旨在為python提供一個繪圖庫。matplotlib與numpy組合是一種可行的matlab替代方案。在可視化中matplotlib是最常使用的工具,是對數據整體判斷、效果預測不可或缺的重要模塊。
  • 手把手教你用Matplotlib進行數據可視化
    http://matplotlib.org就像我們用縮寫np來表示NumPy一樣,我們也會用一些標準的縮寫來表示Matplotlib導入:import matplotlib as mpl   import matplotlib.pyplot as plt plt是我們最常用的一個接口。
  • 手把手教你用Matplotlib畫一張好看的圖
    Matplotlib進階圖表繪圖第一篇,手把手教你如何從0到1畫出一張好看的圖。本文用的數據如圖所示,Dataframe中顯示的是相關職位對應的地區和相應的薪水狀況,單位是千,要統計各個城市的薪資狀況。
  • python數據科學系列:matplotlib入門詳細教程
    與之齊名,matplotlib作為數據科學的的另一必備庫,算得上是python可視化領域的元老,更是很多高級可視化庫的底層基礎,其重要性不言而喻。本篇對matplotlib進行系統性介紹,不會面面俱到,但求體系完備、詳略得當。
  • python:matplotlib入門詳細教程
    與之齊名,matplotlib作為數據科學的的另一必備庫,算得上是python可視化領域的元老,更是很多高級可視化庫的底層基礎,其重要性不言而喻。本篇對matplotlib進行系統性介紹,不會面面俱到,但求體系完備、詳略得當。
  • 如何用matplotlib繪圖呢?
    什麼是matplotlib?使用過python做數據分析的小夥伴都知道,matplotlib是一款命令式、較底層、可定製性強、圖表資源豐富、簡單易用、出版質量級別的python 2D繪圖庫。matplotlib算是python繪圖的元老級庫,類似程式語言裡的C語言。很多其它的python繪圖庫是基於matplotlib開發的,比如seaborn、ggplot、plotnine、holoviews、basemap等。matplotlib可用於python腳本、python shell、jupyter notebook、web等。
  • Python Matplotlib入門學習(一)
    ,各行各業都會遇到與數據相關的行業,所以數據可視化過程是理解數據必不可少的部分,今天就帶大家通過matplotlib的官方文檔帶領大家學習如何進行基本繪圖。意思是pyplot matplotlib.pyplot是matplotlib的基於狀態的接口。通俗的就可以理解這個接口中有很多函數,很多功能我們可以直接調用。
  • 巧用 Matplotlib 動畫,讓你的 Python 可視化大放異彩
    這篇文章雖然不是篇典型的數據科學類文章,不過它涉及到數據科學以及商業智能的應用。Python 的 Matplotlib 是最常用的圖表繪製以及數據可視化庫。我們對摺線圖、柱狀圖以及熱力圖都比較熟悉,但你知道用 Matplotlib 還能做簡單的動畫嗎?下面就是用 Matplotlib 製作動畫的例子。
  • Python數據可視化,無法繞過的matplotlib基礎知識!!!
    ,會讓你的數據分析等工作錦上添花,讓人印(升)象(職)深(加)刻(薪)。matplotlib是python優秀的數據可視化庫,python數據分析必備利器,本文專門為你整理了matplotlib詳細使用方法,來學習吧!--- 以下是正文 ---數據可視化非常重要,因為錯誤或不充分的數據表示方法可能會毀掉原本很出色的數據分析工作。
  • Matplotlib數據可視化!
    數據可視化,就是指將結構或非結構數據轉換成適當的可視化圖表,然後將隱藏在數據中的信息直接展現於人們面前。相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成為了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。
  • Python數據分析利器:matplotlib超詳細基礎介紹!!!
    ,會讓你的數據分析等工作錦上添花,讓人印(升)象(職)深(加)刻(薪)。matplotlib是python優秀的數據可視化庫,python數據分析必備利器,本文專門為你整理了matplotlib詳細使用方法,來學習吧!--- 以下是正文 ---數據可視化非常重要,因為錯誤或不充分的數據表示方法可能會毀掉原本很出色的數據分析工作。
  • 高效使用 Python 可視化工具 Matplotlib
    基本前提如果你除了本文之外沒有任何基礎,建議用以下幾個步驟學習如何使用matplotlib:學習基本的matplotlib術語,尤其是什麼是圖和坐標軸始終使用面向對象的接口,從一開始就養成使用它的習慣用基礎的pandas繪圖開始你的可視化學習用seaborn進行更複雜的統計可視化用matplotlib來定製
  • 這麼用MatPlotLib視覺化呈現數據,你值得擁有!
    數據科學中的數據視覺化眾所周知,人腦更易於理解圖像。因此有句俗語說:一圖勝千言。而這完全適用於數據科學,因為其需要分析大量視覺化呈現的數據以推演數據模型。數據視覺化是數據科學領域的一項技術,可使你講出具有信服力的故事,通過易於理解、模擬化的方式將數據和分析結果視覺化呈現。
  • 見識matplotlib:不常見的一面,折線圖!
    人們往往都更喜歡看圖說話,那麼用python的各位大俠們,大家都在用什麼畫圖呢?各種各樣的畫圖包猶如各式各樣的兵器,有的兵器功能單一但是在細分領域超級專業無敵,有的兵器功能多而全,用法靈活。眾所周知,matplotlib是python繪圖的基礎包,能夠生成各種各樣2D或者3D的圖形,用法算是多而全的那種,下邊是matplotlib官網首頁作為例子的幾張圖,大家感受一下:什麼?醜拒?不不不,別激動!其實matplotlib一直是一個低調奢華有內涵的包,需要我們透過它樸實無華的外表認清它豐富多彩的內在,來康康這條妖嬈的曲線,有沒有感受到它的召喚?
  • Python-Matplotlib: 官方學習手冊獲取與學習
    此外,matplotlib還有一個基於圖像處理庫(如開放圖形庫OpenGL)的pylab接口,其設計與MATLAB非常類似--儘管並不怎麼好用。SciPy就是用matplotlib進行圖形繪製。matplotlib最初由John D. Hunter撰寫,它擁有一個活躍的開發社區,並且根據BSD樣式許可證分發。在John D.
  • 還在煩惱用python在同一圖裡畫多數據曲線嗎?教你6種姿勢搞定
    概要:python的matplotlib作圖很強大,本文教你用6種不同方式解決將多種數據曲線畫到一起。問題:今天,老闆又要一個數據報表,小明選擇用 python來實現。「用matplotlib用來可視化。
  • Python 數據分析:Matplotlib 繪圖
    簡介Matplotlib 是 Python 提供的一個繪圖庫,通過該庫我們可以很容易的繪製出折線圖、直方圖、散點圖、餅圖等豐富的統計圖,安裝使用 pip install matplotlib 命令即可,Matplotlib 經常會與 NumPy 一起使用。
  • 如何系統地學習Python 中 matplotlib, numpy, scipy, pandas?
    總的來說,如果你想理解和處理手頭的數據,就用 Pandas;如果你想執行一些複雜的計算,就用 Numpy 和 SciPy;如果你想將數據可視化,就用 Matplotlib。這 4 個庫在 Python 生態體系中的地位也不一樣,相對來說 Numpy 最簡單,處於最底層。
  • python可視化之matplotlib庫餅形圖的基本用法與應用實例
    實驗環境:已正確安裝python3.5、matplotlib1、餅形圖概念餅狀圖顯示一個整體中各項大小佔總體的百分比,可以清楚反應部分與總體的關係。在餅形圖上標出百分比為了在平面上觀察各項的比例,可以設置x與y的比例為1進行觀察。利用axes方法創建或激活軸,aspect為一個數字時,表示屏幕空間中y與x之比。
  • Matplotlib數據可視化方法總結
    數據可視化,就是指將結構或非結構數據轉換成適當的可視化圖表,然後將隱藏在數據中的信息直接展現於人們面前。相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成為了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。