<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你用Matplotlib進(jìn)行數(shù)據(jù)可視化

          共 4263字,需瀏覽 9分鐘

           ·

          2020-12-16 22:57


          導(dǎo)讀:Matplotlib是建立在NumPy數(shù)組上的一個(gè)多平臺(tái)數(shù)據(jù)可視化庫。在2002年,約翰·亨特(John Hunter)提出Matplotlib,最初的構(gòu)思是設(shè)計(jì)為IPython的一個(gè)補(bǔ)丁,以便能夠從命令行啟用交互式MATLAB樣式繪圖。


          近幾年,更新、更炫酷的工具(例如,R語言中的ggplot和ggvis)層出不窮,最終取代了Matplotlib,可是Matplotlib仍然是一個(gè)經(jīng)過良好測試的、非常重要的跨平臺(tái)圖形引擎。


          作者:阿迪蒂亞·夏爾馬(Aditya Sharma)、維什韋什·拉維·什里馬利(Vishwesh Ravi Shrimali)、邁克爾·貝耶勒(Michael Beyeler)
          來源:大數(shù)據(jù)DT(ID:hzdashuju)





          01 導(dǎo)入Matplotlib


          如果你安裝了完整的Python Anaconda,那么你已經(jīng)安裝了Matplotlib,可以開始了。否則,你可能要訪問官網(wǎng)獲取安裝說明。


          http://matplotlib.org


          就像我們用縮寫np來表示NumPy一樣,我們也會(huì)用一些標(biāo)準(zhǔn)的縮寫來表示Matplotlib導(dǎo)入:


          import?matplotlib?as?mpl


          import?matplotlib.pyplot?as?plt


          plt是我們最常用的一個(gè)接口。



          02 生成一個(gè)簡單的圖形


          言歸正傳,讓我們創(chuàng)建第一個(gè)圖形。


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


          import?numpy?as?np


          x?=?np.linspace(0,?10,?100)


          我們可以使用NumPy的sin函數(shù)求sin函數(shù)的所有x值,并通過調(diào)用plt的plot函數(shù)可視化結(jié)果:


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


          你親自試過了嗎?發(fā)生什么了?有什么發(fā)現(xiàn)嗎?


          問題是,這取決于你在何處運(yùn)行這個(gè)腳本,你可能什么都看不到。以下是可以考慮的可能性:


          1. 從.py腳本繪圖


          如果你正從一個(gè)腳本運(yùn)行matplotlib,那么你只需要調(diào)用plt,如下所示:


          plt.show()


          調(diào)用后,圖形就會(huì)顯示出來!


          2. 從IPython shell繪圖


          這實(shí)際上是以交互方式運(yùn)行matplotlib的最便捷的方式之一。要顯示繪圖,你需要在啟動(dòng)IPython之后,調(diào)用%matplotlib魔術(shù)命令:


          %matplotlib
          Using?matplotlib?backend:?Qt5Agg


          import?matplotlib.pyplot?as?plt


          然后,所有圖都會(huì)自動(dòng)顯示出來,不必每次都調(diào)用plt.show()。


          3. 從Jupyter Notebook繪圖


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


          • %matplotlib notebook將生成的交互式圖嵌入notebook中。

          • %matplotlib inline將生成的靜態(tài)圖嵌入notebook中。


          我們通常會(huì)選擇內(nèi)聯(lián)選項(xiàng):


          %matplotlib?inline


          現(xiàn)在,讓我們再試一次:


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


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


          ▲圖2-4 應(yīng)用內(nèi)聯(lián)選項(xiàng)生成的圖


          稍后,如果你想保存圖表,可以直接從IPython或Jupyter Notebook的選項(xiàng)中保存:


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


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


          在導(dǎo)入matplotlib之后,運(yùn)行plt.style.use(style_name),你可以更改繪圖的樣式。在plt.style.available中列出了所有可用的樣式。例如,試試plt.style.use('fivethirtyeight')、plt.style.use('ggplot')或者plt.style.use('seaborn-dark')。為了增加樂趣,可以運(yùn)行plt.xkcd(),再嘗試?yán)L制其他內(nèi)容。



          03 可視化外部數(shù)據(jù)集的數(shù)據(jù)


          作為本文的最后一個(gè)測試,讓我們可視化一些來自外部數(shù)據(jù)集的數(shù)據(jù),例如scikit-learn的digits數(shù)據(jù)集。


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


          • 用于實(shí)際數(shù)據(jù)的scikit-learn

          • 用于數(shù)據(jù)處理的NumPy

          • Matplotlib


          首先,讓我們導(dǎo)入所有這些可視化工具:


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


          第一步是實(shí)際加載數(shù)據(jù):


          digits?=?datasets.load_digits()


          如果我們沒有記錯(cuò)的話,digits應(yīng)該有2個(gè)不同的字段:一個(gè)是data字段,包含實(shí)際的圖像數(shù)據(jù);另一個(gè)是target字段,包含圖像標(biāo)簽。


          與其相信我們的記憶,不如讓我們研究一下digits對象。這通過輸入字段名稱、添加句點(diǎn)、再按下Tab鍵—digits.來實(shí)現(xiàn)。這會(huì)顯示出digits對象還包含了一些其他字段,例如一個(gè)名為images的字段。images和data這2個(gè)字段似乎只是形狀不同:


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


          輸出結(jié)果:


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


          在這兩個(gè)例子中,第一維都對應(yīng)于數(shù)據(jù)集中的圖像數(shù)。但是data將所有像素排列在一個(gè)大的向量中,而images則保留了每個(gè)圖像的8×8空間排列。


          因此,如果我們想繪制單張圖像,images字段可能更合適。首先,使用NumPy的數(shù)組切割,從數(shù)據(jù)集中抓取一張圖像:


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


          這里,我們說想要抓取長為1797項(xiàng)的數(shù)組中的第一行,以及所有對應(yīng)的8×8=64個(gè)像素。然后,我們可以使用plt的imshow函數(shù)繪制圖像:


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


          上述命令給出的輸出如圖2-5所示。請注意,圖像是模糊的,因?yàn)槲覀儗⒃搱D像調(diào)整到了更大的尺寸。原始圖像的大小只有8×8。


          ▲圖2-5 生成單張圖像的示例結(jié)果


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


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


          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個(gè)數(shù)字的一組子圖


          對于各種數(shù)據(jù)集,另一個(gè)很好的資源是本書作者邁克爾·貝耶勒的母校加州大學(xué)歐文分校的機(jī)器學(xué)習(xí)資源庫:


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


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

          維什韋什·拉維·什里馬利(Vishwesh Ravi Shrimali),于2018年畢業(yè)于彼拉尼博拉理工學(xué)院(BITS Pilani)機(jī)械工程專業(yè)。此后一直在BigVision LLC從事深度學(xué)習(xí)和計(jì)算機(jī)視覺方面的工作,還參與了官方OpenCV課程的創(chuàng)建。

          邁克爾·貝耶勒(Michael Beyeler),是華盛頓大學(xué)神經(jīng)工程和數(shù)據(jù)科學(xué)的博士后研究員,致力于仿生視覺的計(jì)算模型研究,以為盲人植入人工視網(wǎng)膜(仿生眼睛),改善盲人的感知體驗(yàn)。他的工作屬于神經(jīng)科學(xué)、計(jì)算機(jī)工程、計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)的交叉領(lǐng)域。


          本文摘編自機(jī)器學(xué)習(xí):使用OpenCV、Python和scikit-learn進(jìn)行智能圖像處理(原書第2版)》,經(jīng)出版方授權(quán)發(fā)布。


          延伸閱讀機(jī)器學(xué)習(xí)

          點(diǎn)擊上圖了解及購買

          轉(zhuǎn)載請聯(lián)系微信:DoctorData


          推薦語:保姆級(jí)OpenCV入門實(shí)戰(zhàn)手冊——“蝴蝶書”全新升級(jí)!通過具體的編程實(shí)踐案例,介紹最新OpenCV 4版本所提供的大量新特性和平臺(tái)改進(jìn)。通過書中提供的用例代碼,你可以快速熟悉并掌握機(jī)器學(xué)習(xí)領(lǐng)域的相關(guān)知識(shí),掌握使用OpenCV 4構(gòu)建智能計(jì)算機(jī)視覺應(yīng)用程序所需要的機(jī)器學(xué)習(xí)技能。



          劃重點(diǎn)?


          干貨直達(dá)?


          更多精彩?

          在公眾號(hào)對話框輸入以下關(guān)鍵詞
          查看更多優(yōu)質(zhì)內(nèi)容!

          PPT?|?讀書?|?書單?|?硬核?|?干貨?|?講明白?|?神操作
          大數(shù)據(jù)?|?云計(jì)算?|?數(shù)據(jù)庫?|?Python?|?可視化
          AI?|?人工智能?|?機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?NLP
          5G?|?中臺(tái)?|?用戶畫像?|?1024?|?數(shù)學(xué)?|?算法?|?數(shù)字孿生

          據(jù)統(tǒng)計(jì),99%的大咖都完成了這個(gè)神操作
          ?


          瀏覽 16
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲黄色电影网站 | 加勒比免费精品视频 | 亚洲AV电影免费在线观看 | 亚洲巨爆乳一区二区三区 | 亚洲AV一二三区 |