手把手教你用Matplotlib進行數據可視化

2020-12-25 TechWeb

01 導入Matplotlib

如果你安裝了完整的Python Anaconda,那麼你已經安裝了Matplotlib,可以開始了。否則,你可能要訪問官網獲取安裝說明。

http://matplotlib.org

就像我們用縮寫np來表示NumPy一樣,我們也會用一些標準的縮寫來表示Matplotlib導入:

import matplotlib as mpl   import matplotlib.pyplot as plt 

plt是我們最常用的一個接口。

02 生成一個簡單的圖形

言歸正傳,讓我們創建第一個圖形。

假設我們要繪製正弦函數sin(x)的一個簡單線圖。我們希望函數求x軸(0≤x≤10)上的所有值。我們將使用NumPy的linspace函數在x軸上創建一個線性空間,x值從0到10,共100個樣本點:

import numpy as np  x = np.linspace(0, 10, 100) 

我們可以使用NumPy的sin函數求sin函數的所有x值,並通過調用plt的plot函數可視化結果:

plt.plot(x, np.sin(x)) 

你親自試過了嗎?發生什麼了?有什麼發現嗎?

問題是,這取決於你在何處運行這個腳本,你可能什麼都看不到。以下是可以考慮的可能性:

1. 從.py腳本繪圖

如果你正從一個腳本運行matplotlib,那麼你只需要調用plt,如下所示:

plt.show() 

調用後,圖形就會顯示出來!

2. 從IPython shell繪圖

這實際上是以交互方式運行matplotlib的最便捷的方式之一。要顯示繪圖,你需要在啟動IPython之後,調用%matplotlib魔術命令:

%matplotlib  Using matplotlib backend: Qt5Agg   import matplotlib.pyplot as plt 

然後,所有圖都會自動顯示出來,不必每次都調用plt.show()。

3. 從Jupyter Notebook繪圖

如果你從基於瀏覽器的Jupyter Notebook上查看這段代碼,你需要使用同樣的%matplotlib魔術命令。可是,你還可以選擇將圖形直接嵌入notebook中,這有兩種可能的結果:

 %matplotlib notebook將生成的交互式圖嵌入notebook中。  %matplotlib inline將生成的靜態圖嵌入notebook中。

我們通常會選擇內聯選項:

%matplotlib inline 

現在,讓我們再試一次:

plt.plot(x, np.sin(x)) 

上述命令給出的輸出如圖2-4所示。

▲圖2-4 應用內聯選項生成的圖

稍後,如果你想保存圖表,可以直接從IPython或Jupyter Notebook的選項中保存:

plt.savefig('figures/02.03-sine.png') 

只要保證使用所支持的文件後綴即可,例如.jpg、.png、.tif、.svg、.eps或者.pdf。

在導入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的digits數據集。

具體來說,我們將需要3個可視化工具:

 用於實際數據的scikit-learn  用於數據處理的NumPy  Matplotlib

首先,讓我們導入所有這些可視化工具:

import numpy as np  from sklearn import datasets  import matplotlib.pyplot as plt  %matplotlib inline 

第一步是實際加載數據:

digits = datasets.load_digits() 

如果我們沒有記錯的話,digits應該有2個不同的欄位:一個是data欄位,包含實際的圖像數據;另一個是target欄位,包含圖像標籤。

與其相信我們的記憶,不如讓我們研究一下digits對象。這通過輸入欄位名稱、添加句點、再按下Tab鍵—digits.來實現。這會顯示出digits對象還包含了一些其他欄位,例如一個名為images的欄位。images和data這2個欄位似乎只是形狀不同:

print(digits.data.shape)  print(digits.images.shape) 

輸出結果:

(1797, 64)  (1797, 8, 8) 

在這兩個例子中,第一維都對應於數據集中的圖像數。但是data將所有像素排列在一個大的向量中,而images則保留了每個圖像的8×8空間排列。

因此,如果我們想繪製單張圖像,images欄位可能更合適。首先,使用NumPy的數組切割,從數據集中抓取一張圖像:

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

這裡,我們說想要抓取長為1797項的數組中的第一行,以及所有對應的8×8=64個像素。然後,我們可以使用plt的imshow函數繪製圖像:

plt.imshow(img, cmap='gray')  plt.savefig('figures/02.04-digit0.png') 

上述命令給出的輸出如圖2-5所示。請注意,圖像是模糊的,因為我們將該圖像調整到了更大的尺寸。原始圖像的大小只有8×8。

▲圖2-5 生成單張圖像的示例結果

此外,我們還可以使用cmap參數指定一個彩圖。在默認情況下,Matplotlib使用MATLAB的默認彩圖jet。可是,對於灰度圖像,gray彩圖更有意義。

最後,我們可以利用plt的subplot函數繪製一組數字樣本。subplot函數與在MATLAB中一樣,我們指定行數、列數以及當前子圖的索引(從1開始)。我們將使用一個for循環遍歷數據集中的前10個圖像,每個圖像都有自己的子圖:

plt.figure(figsize=(14, 4))  for image_index in range(10):      # images are 0-indexed, subplots are 1-indexed      subplot_index = image_index + 1      plt.subplot(2, 5, subplot_index)      plt.imshow(digits.images[image_index, :, :], cmap='gray') 

生成的輸出如圖2-6所示。

▲圖2-6 生成包含10個數字的一組子圖

對於各種數據集,另一個很好的資源是本書作者麥可·貝耶勒的母校加州大學歐文分校的機器學習資源庫:

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

關於作者:阿迪蒂亞·夏爾馬(Aditya Sharma),羅伯特·博世(Robert Bosch)公司的一名高級工程師,致力於解決真實世界的自動計算機視覺問題。曾獲得羅伯特·博世公司2019年人工智慧編程馬拉松的首名。

維什韋什·拉維·什裡馬利(Vishwesh Ravi Shrimali),於2018年畢業於彼拉尼博拉理工學院(BITS Pilani)機械工程專業。此後一直在BigVision LLC從事深度學習和計算機視覺方面的工作,還參與了官方OpenCV課程的創建。

麥可·貝耶勒(Michael Beyeler),是華盛頓大學神經工程和數據科學的博士後研究員,致力於仿生視覺的計算模型研究,以為盲人植入人工視網膜(仿生眼睛),改善盲人的感知體驗。他的工作屬於神經科學、計算機工程、計算機視覺和機器學習的交叉領域。

本文摘編自《機器學習:使用OpenCV、Python和scikit-learn進行智能圖像處理(原書第2版)》,經出版方授權發布。

  

相關焦點

  • Matplotlib數據可視化!
    數據可視化,就是指將結構或非結構數據轉換成適當的可視化圖表,然後將隱藏在數據中的信息直接展現於人們面前。相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成為了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。
  • Matplotlib數據可視化方法總結
    數據可視化,就是指將結構或非結構數據轉換成適當的可視化圖表,然後將隱藏在數據中的信息直接展現於人們面前。相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成為了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。
  • Python實操:手把手教你用Matplotlib把數據畫出來
    否則,可能要訪問官網並從中獲取安裝說明:http://matplotlib.org正如使用np作為 NumPy 的縮寫,我們將使用一些標準的縮寫來表示 Matplotlib 的引入:In [1]: import matplotlib as mplIn [2]: import matplotlib.pyplot as plt
  • 數據可視化|matplotlib 的主要組成元素
    >matplotlib 是 Python 中的一個繪圖庫,具有可定製性強、圖表資源豐富等特點,既能創建靜態圖形,也能創建動態交互的數據可視化效果;既能創建 2D 圖形,也能創建 3D 圖形;既能創建常見的簡單圖形,也能創建統計學專業的複雜圖形。ma
  • Python數據可視化技能提升—用好matplotlib第1篇
    好啦,既然有朋友提出需要來啦,那今天咱們就聊點Python數據可視化相關的東東吧,說到Python的數據可視化呢,就必須提Python的一個庫哦,它就是大名鼎鼎的matplotlib庫,也是目前用得最多的Python數據可視化庫哦,matplotlib其實把MatLab的很多優點都借鑑了過來,所以呢,熟悉MatLab的朋友
  • matplotlib的Python數據可視化和探索——入門指南
    matplotlib——最受歡迎的Python庫,用於數據可視化和探索我喜歡在Python中使用matplotlib。這是我學會掌握的第一個可視化庫,此後一直存在。matplotlib是最受歡迎的用於數據可視化和探索的Python庫,這是有原因的——它提供的靈活性和敏捷性是無與倫比的!
  • Matplotlib 數據可視化基本操作
    最近著手to C業務,藉助Python進行數據分析,涉及到數據可視化的一些內容,跟著網上的教程敲了敲代碼本文內容:csv文件數據讀取與信息查閱;柱形圖、折線圖、餅圖、箱型圖、散點圖、直方圖繪製data讀取與顯示 #  import packagesimport pandas as pd import
  • Python數據可視化,無法繞過的matplotlib基礎知識!!!
    ,會讓你的數據分析等工作錦上添花,讓人印(升)象(職)深(加)刻(薪)。matplotlib是python優秀的數據可視化庫,python數據分析必備利器,本文專門為你整理了matplotlib詳細使用方法,來學習吧!--- 以下是正文 ---數據可視化非常重要,因為錯誤或不充分的數據表示方法可能會毀掉原本很出色的數據分析工作。
  • 高效使用 Python 可視化工具 Matplotlib
    基本前提如果你除了本文之外沒有任何基礎,建議用以下幾個步驟學習如何使用matplotlib:學習基本的matplotlib術語,尤其是什麼是圖和坐標軸始終使用面向對象的接口,從一開始就養成使用它的習慣用基礎的pandas繪圖開始你的可視化學習用seaborn進行更複雜的統計可視化用matplotlib來定製
  • 手把手教你用Matplotlib畫一張好看的圖
    Matplotlib進階圖表繪圖第一篇,手把手教你如何從0到1畫出一張好看的圖。本文用的數據如圖所示,Dataframe中顯示的是相關職位對應的地區和相應的薪水狀況,單位是千,要統計各個城市的薪資狀況。
  • 可視化技能之Matplotlib(下)|可視化系列02
    本篇繼續探索Matplotlib的強悍可視化能力。Matplotlib動態可視化計算機及通信技術的發展極大豐富了多媒體內容的發展,文不如圖、圖不如動圖;BI近些年也逐漸發展,人們已不滿足於看靜態的圖表。短視頻的火熱也給了動態圖更多的發展空間。動態圖和交互圖表能更生動地表現數據變化、展現數據關聯,傳達更多的信息。插入排序的動態展現生動的動畫有助於我們理解算法。
  • 提高編程能力:Python數據可視化技能提升——好matplotlib第2篇
    上次已經和大家聊了Python數據可視化的經典庫:matplotlib,大家已經知道啦,matplotlib庫是Python中用於繪製二維、三維等這些圖表的數據可視化工具,並且已經和大家聊完了關於matplotlib庫的安裝啦、還有matplotlib庫的兩個函數,分別是plot()函數和scatter()函數哦,相信大家已經對於這兩個函數的用法掌握啦,在這就不多說了哈,如果還想繼續了解
  • 使用Matplotlib可視化數據的5個強大技巧
    數據可視化用於以更直接的表示方式顯示數據,並且更易於理解。它可以用柱狀圖、散點圖、折線圖、餅圖等形式形成。許多人仍然使用Matplotlib作為後端模塊來可視化他們的圖形。在這個故事中,我將給你一些技巧,使用Matplotlib創建一個優秀圖表的5個強大技巧。1.
  • Python可視化:學會Matplotlib這幾點就夠了!
    今天我們就來介紹一下必備的Matplotlib可視化關鍵的幾點,只要了解了這幾點就夠了。1、可視化直方圖舉例import matplotlib.pyplot as pltplt.rcParams['font.family']='Arial Unicode MS' #中文顯示plt.plot([3,1,4,5,2]) #基礎數據實現折線圖plt.ylabel('縱軸(值)')
  • 看了這個總結,其實 Matplotlib 可視化,也沒那麼難!
    作者 | 舊時晚風拂曉城 來源 | 傑哥的IT之旅(ID:Jake_Internet)頭圖 | CSDN 下載自東方IC公眾號「傑哥的IT之旅」後臺回覆:「matplotlib數據可視化」,獲取本文完整數據集。Python 中可以通過 matplotlib 模塊的 pyplot 子庫來完成繪圖。
  • 【數據分析】Matplotlib
    Matplotlib是一個強大的Python繪圖和數據可視化的工具包。數據可視化也是我們數據分析的最重要的工作之一,可以幫助我們完成很多操作,例如:找出異常值、必要的一些數據轉換等。完成數據分析的最終結果也許就是做一個可交互的數據可視化。
  • 【Python教程】用Python進行數據可視化
    在本文中,我將介紹如何開始使用Python和matplotlib、seaborn兩個庫對數據進行可視化。下面我們就用上面這個簡單的數據集作為例子,展示用 Python 做出9種可視化效果,並附有相關代碼。
  • 數據呈現丨好用易懂的matplotlib可視化,快來了解一下!
    import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltimport seaborn as sns
  • Python 數據分析:Matplotlib 繪圖
    簡介Matplotlib 是 Python 提供的一個繪圖庫,通過該庫我們可以很容易的繪製出折線圖、直方圖、散點圖、餅圖等豐富的統計圖,安裝使用 pip install matplotlib 命令即可,Matplotlib 經常會與 NumPy 一起使用。
  • Python數據分析之matplotlib作圖
    繪製簡單的折線圖下面我們來使用前面介紹過的matplotlib庫繪製一個簡單的折線圖,再對其進行定製,以實現信息更豐富的數據可視化,我們將使用平方數序列1、4、9、16和25來繪製這個圖表。只需向matplotlib提供如下數字,matplotlib就能完成其他的工作:我們首先導入了模塊pyplot,並給它指定了別名plt,以免反覆輸入pyplot。在線示例大都能夠這樣做,我們在這裡也採取這種方法。模塊pyplot包含了很多用於生成圖表的函數。