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

2021-01-08 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版)》,經出版方授權發布。

  

相關焦點

  • Python數據可視化技能提升—用好matplotlib第1篇
    好啦,既然有朋友提出需要來啦,那今天咱們就聊點Python數據可視化相關的東東吧,說到Python的數據可視化呢,就必須提Python的一個庫哦,它就是大名鼎鼎的matplotlib庫,也是目前用得最多的Python數據可視化庫哦,matplotlib其實把MatLab的很多優點都借鑑了過來,所以呢,熟悉MatLab的朋友,對於matplotlib是上手很快的哦!
  • matplotlib的Python數據可視化和探索——入門指南
    matplotlib——最受歡迎的Python庫,用於數據可視化和探索我喜歡在Python中使用matplotlib。這是我學會掌握的第一個可視化庫,此後一直存在。matplotlib是最受歡迎的用於數據可視化和探索的Python庫,這是有原因的——它提供的靈活性和敏捷性是無與倫比的!
  • 提高編程能力:Python數據可視化技能提升——好matplotlib第2篇
    上次已經和大家聊了Python數據可視化的經典庫:matplotlib,大家已經知道啦,matplotlib庫是Python中用於繪製二維、三維等這些圖表的數據可視化工具,並且已經和大家聊完了關於matplotlib庫的安裝啦、還有matplotlib庫的兩個函數,分別是plot()函數和scatter()函數哦,相信大家已經對於這兩個函數的用法掌握啦,在這就不多說了哈,如果還想繼續了解
  • 使用Matplotlib可視化數據的5個強大技巧
    數據可視化用於以更直接的表示方式顯示數據,並且更易於理解。它可以用柱狀圖、散點圖、折線圖、餅圖等形式形成。許多人仍然使用Matplotlib作為後端模塊來可視化他們的圖形。在這個故事中,我將給你一些技巧,使用Matplotlib創建一個優秀圖表的5個強大技巧。1.
  • 看了這個總結,其實 Matplotlib 可視化,也沒那麼難!
    作者 | 舊時晚風拂曉城 來源 | 傑哥的IT之旅(ID:Jake_Internet)頭圖 | CSDN 下載自東方IC公眾號「傑哥的IT之旅」後臺回覆:「matplotlib數據可視化」,獲取本文完整數據集。Python 中可以通過 matplotlib 模塊的 pyplot 子庫來完成繪圖。
  • 數字黑洞:python-matplotlib來實現可視化
    1.2 數字黑洞與python-matplotlib可視化1.2.4 python-matplotlib可視化來看看效果:pic5:輸入n為個位數1~6的情況2 matplotlib可視化代碼2:#導入模塊可視化用import matplotlib.pyplot as plt#定一個空列表,存放數值num_data=[]#數字黑洞函數def black(number): if number>1: if number%2==0: number=number/2 else:
  • 50種常用的matplotlib可視化,再也不用擔心模型背著我亂跑了
    機器之心報導參與:思源數據分析與機器學習中常需要大量的可視化,因此才能直觀了解模型背地裡都幹了些什麼。而在可視化中,matplotlib 算得上是最常用的工具,不論是對數據有個預先的整體了解,還是可視化預測效果,matplotlib 都是不可缺失的模塊。
  • Pandas可視化綜合指南:手把手從零教你繪製數據圖表
    曉查 編譯整理量子位 出品 | 公眾號 QbitAI數據可視化本來是一個非常複雜的過程,但隨著Pandas數據幀plot()函數的出現,使得創建可視化圖形變得很容易。在數據幀上進行操作的plot()函數只是matplotlib中plt.plot()函數的一個簡單包裝 ,可以幫助你在繪圖過程中省去那些長長的matplotlib代碼。
  • 這麼用MatPlotLib視覺化呈現數據,你值得擁有!
    數據科學中的數據視覺化眾所周知,人腦更易於理解圖像。因此有句俗語說:一圖勝千言。而這完全適用於數據科學,因為其需要分析大量視覺化呈現的數據以推演數據模型。數據視覺化是數據科學領域的一項技術,可使你講出具有信服力的故事,通過易於理解、模擬化的方式將數據和分析結果視覺化呈現。這項技術能讓複雜的數據看起來很簡單,並易於理解。
  • 如何用pandas更快地進行數據可視化?
    作者:劉早起來源:早起Python(公眾號)如果你經常使用Python進行數據分析,那麼對於pandas一定不會陌生,但是Pandas除了在數據處理上大放異彩,隨著版本的不斷更新,Pandas的繪圖功能在某些情況下甚至要比matplotlib更加適用,本文就將介紹如何用
  • 30分鐘入門 Matplotlib 繪圖
    數據可視化是數據分析的重要環節,藉助圖形能夠幫助更加直觀地表達出數據背後的」東西」。Matplolib最初主要模仿Matlab的畫圖命令,但是它是獨立於Matlab的,可以自由、免費使用的繪圖包。Matplotlib依賴於之前介紹的Numpy庫來提供出色的繪圖能力。
  • matplotlib繪圖的核心原理講解
    作者:朱小五來自:凹凸數據(ID:alltodata)matplotlib是基於Python語言的開源項目,旨在為Python提供一個數據繪圖包。相信大家都用過它來數據可視化,之前我還分享過25個常用Matplotlib圖的Python代碼。可是你了解過它繪圖的核心原理嗎?
  • Matplotlib繪圖|快速定義圖表樣式的小技巧
    參數是以字典鍵值對的形式聲明,格式如下matplotlib.rcParams['lines.linewidth'] = 2matplotlib.rcParams['lines.linestyle'] = '--'在創建圖表之前,對全局參數進行設定,設定好了之後可以應用到全部圖表中,不需要自己再進行逐一設置mpl.rcParams['lines.linewidth']
  • 如何用matplotlib繪圖呢?
    什麼是matplotlib?使用過python做數據分析的小夥伴都知道,matplotlib是一款命令式、較底層、可定製性強、圖表資源豐富、簡單易用、出版質量級別的python 2D繪圖庫。matplotlib算是python繪圖的元老級庫,類似程式語言裡的C語言。很多其它的python繪圖庫是基於matplotlib開發的,比如seaborn、ggplot、plotnine、holoviews、basemap等。matplotlib可用於python腳本、python shell、jupyter notebook、web等。
  • 有這5小段代碼在手,輕鬆實現數據可視化(Python+Matplotlib)
    大數據文摘作品編譯:傅一洋、吳雙、龍牧雪本文要講的是Matplotlib,一個強大的Python可視化庫。一共5小段代碼,輕鬆實現散點圖、折線圖、直方圖、柱狀圖、箱線圖,每段代碼只有10行,也是再簡單不過了吧!數據可視化是數據科學家工作的一項主要任務。
  • 使用Matplotlib繪製堆積條形圖
    就像任何可視化一樣,條形圖也有一些缺點,例如它們的可伸縮性較差。條形圖太多會使人感到難以閱讀,尤其是在當我們處理層次化的類別,也就是當我們有需要可視化的組和子組時,這個問題更常見。在這種情況下,堆積條形圖是一個很好的選擇,它讓我們能更好地比較和分析數據。在本文中,我們將探討如何使用Python的Matplotlib構建這些可視化圖形。
  • Matplotlib數據可視化:餅圖與箱線圖
    from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParams['font.sans-serif
  • 這10 個 Python 可視化工具,你都用過?
    由於 matplotlib 是第一個 Python 可視化程序庫,有許多別的程序庫都是建立在它的基礎上或者直接調用它。 比如pandas和Seaborn就是matplotlib的外包,它們讓你能用更少的代碼去調用 matplotlib的方法。
  • 超硬核的 Python 數據可視化教程!
    Python實現可視化的三個步驟:確定問題,選擇圖形 轉換數據,應用函數 參數設置,一目了然 1、首先,要知道我們用哪些庫來畫圖?matplotlibpython中最基本的作圖庫就是matplotlib,是一個最基礎的Python可視化庫,一般都是從matplotlib上手Python數據可視化,然後開始做縱向與橫向拓展。
  • 見識matplotlib:不常見的一面,折線圖!
    人們往往都更喜歡看圖說話,那麼用python的各位大俠們,大家都在用什麼畫圖呢?各種各樣的畫圖包猶如各式各樣的兵器,有的兵器功能單一但是在細分領域超級專業無敵,有的兵器功能多而全,用法靈活。用matplotlib實現畫圖並不難,當然要實現上邊的動態圖和3D圖會有一點難度,但這也只是相對於簡單繪圖而言,畫圖的邏輯並沒有相差很多,通過簡單的圖形學會運用matplotlib繪圖的邏輯以及基礎的知識,再把這些邏輯和知識細節運用到複雜的圖形中去,循序漸進,水到渠成!光說不練假把式,有句話叫做「Talk is cheap !Show me the code !」