快速入門Matplotlib

以下是原文正文:


數據的處理、分析和可視化已經成為 Python 近年來最重要的應用之一。這種現象又進一步引出“大數據”分析等類似的話題,而大數據分析在人們所能預見的諸多領域內都有廣泛應用,這其中就包含筆者個人感興趣的機器學習。

Python 在處理數據、分析數據以及數據可視化方面擁有很多功能強大的工具,這也是 Python 在科學領域中能夠迅速發展的一個主要原因。

在接下來的一系列文章中,我們將介紹 Python 科學計算中涉及的主要的庫,并且學習如何使用它們處理數據以滿足我們的需求。但是我們并非只是停留在快速寫出模板代碼來使用這些庫的層面上,我們還會了解這些庫背后的數學知識,以幫助我們更好地理解庫的運行原理。

首先,我們將從一個功能非常強大的庫 Matplotlib 開始介紹,在后面的文章中也會一直用到這個庫。

什么是 Matplotlib?

簡單來說,Matplotlib 是 Python 的一個繪圖庫。它包含了大量的工具,你可以使用這些工具創建各種圖形,包括簡單的散點圖,正弦曲線,甚至是三維圖形。Python 科學計算社區經常使用它完成數據可視化的工作。

你可以在他們的網站上了解到更多 Matplotlib 背后的設計思想,但是我強烈建議你先瀏覽一下他們的圖庫,體會一下這個庫的各種神奇功能。

畫一個簡單的圖形

首先我們要畫一條在 [0, 2pi] 上的正弦曲線。讀者應該會注意到我們在這里使用了 Numpy 庫,但是即便你沒有使用過這個庫也不用擔心,在后面的文章中我們也會介紹到 Numpy 庫。

import matplotlib.pyplot as plt
import numpy as np

以上這些就是我們將要用到的導入模塊。在我的上一篇文章(以及另一篇文章)中都提到過?from x import *?是一種糟糕的導入方式。我們不想在程序里重復書寫?matplotlib.pyplot?和?numpy,這種書寫方式過于冗長,因此我們采用了上面的折中寫法。

# 簡單的繪圖
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x)) # 如果沒有第一個參數 x,圖形的 x 坐標默認為數組的索引
plt.show() # 顯示圖形

上面的代碼將畫出一個簡單的正弦曲線。np.linspace(0, 2 * np.pi, 50)?這段代碼將會生成一個包含 50 個元素的數組,這 50 個元素均勻的分布在 [0, 2pi] 的區間上。

plot?命令以一種簡潔優雅的方式創建了圖形。提醒一下,如果沒有第一個參數 x,圖形的 x 軸坐標將不再是 0 到 2pi,而應該是數組的索引范圍。

最后一行代碼?`plt.show()?將圖形顯示出來,如果沒有這行代碼圖像就不會顯示。

運行代碼后應該會類似得到下面的圖形:

正弦曲線

在一張圖上繪制兩個數據集

大多數時候讀者可能更想在一張圖上繪制多個數據集。用 Matplotlib 也可以輕松實現這一點。

x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x),x, np.sin(2 * x))
plt.show()

上面的代碼同時繪制了表示函數 sin(x) 和 sin(2x) 的圖形。這段代碼和前面繪制一個數據集的代碼幾乎完全相同,只有一點例外,這段代碼在調用?plt.plot()?的時候多傳入了一個數據集,并用逗號與第一個數據集分隔開。

最后你會得到類似于下面包含兩條曲線的圖形:

兩條正弦曲線

自定義圖形的外觀

當在同一個圖形上展示多個數據集時,通過改變線條的外觀來區分不同的數據集變得非常必要。

# 自定義曲線的外觀
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x), 'r-o',x, np.cos(x), 'g--')
plt.show()

上述代碼展示了兩種不同的曲線樣式:'r-o'?和?'g--'。字母 'r' 和 'g' 代表線條的顏色,后面的符號代表線和點標記的類型。例如?'-o'?代表包含實心點標記的實線,'--'?代表虛線。其他的參數需要讀者自己去嘗試,這也是學習 Matplotlib 最好的方式。

顏色: 藍色 - 'b' 綠色 - 'g' 紅色 - 'r' 青色 - 'c' 品紅 - 'm' 黃色 - 'y' 黑色 - 'k'('b'代表藍色,所以這里用黑色的最后一個字母) 白色 - 'w'

?

線: 直線 - '-' 虛線 - '--' 點線 - ':' 點劃線 - '-.'

?

常用點標記 點 - '.' 像素 - ',' 圓 - 'o' 方形 - 's' 三角形 - '^' 更多點標記樣式點擊這里

最后你會得到類似下面的圖形:

圖形

使用子圖

使用子圖可以在一個窗口繪制多張圖。

# 使用子圖
x = np.linspace(0, 2 * np.pi, 50)
plt.subplot(2, 1, 1) # (行,列,活躍區)
plt.plot(x, np.sin(x), 'r')
plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x), 'g')
plt.show()

使用子圖只需要一個額外的步驟,就可以像前面的例子一樣繪制數據集。即在調用?plot()?函數之前需要先調用?subplot()?函數。該函數的第一個參數代表子圖的總行數,第二個參數代表子圖的總列數,第三個參數代表活躍區域。

活躍區域代表當前子圖所在繪圖區域,繪圖區域是按從左至右,從上至下的順序編號。例如在 4×4 的方格上,活躍區域 6 在方格上的坐標為 (2, 2)。

最終你會得到類似下面的圖形:

子圖

簡單的散點圖

散點圖是一堆離散點的集合。用 Matplotlib 畫散點圖也同樣非常簡單。

# 簡單的散點圖
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
plt.scatter(x,y)
plt.show()

正如上面代碼所示,你只需要調用?scatter()?函數并傳入兩個分別代表 x 坐標和 y 坐標的數組。注意,我們通過?plot?命令并將線的樣式設置為?'bo'?也可以實現同樣的效果。

最后你會得到類似下面的無線圖形:

散點圖

彩色映射散點圖

另一種你可能用到的圖形是彩色映射散點圖。這里我們會根據數據的大小給每個點賦予不同的顏色和大小,并在圖中添加一個顏色欄。

# 彩色映射散點圖
x = np.random.rand(1000)
y = np.random.rand(1000)
size = np.random.rand(1000) * 50
colour = np.random.rand(1000)
plt.scatter(x, y, size, colour)
plt.colorbar()
plt.show()

上面的代碼大量的用到了?np.random.rand(1000),原因是我們繪圖的數據都是隨機產生的。

同前面一樣我們用到了?scatter()?函數,但是這次我們傳入了另外的兩個參數,分別為所繪點的大小和顏色。通過這種方式使得圖上點的大小和顏色根據數據的大小產生變化。

然后我們用?colorbar()?函數添加了一個顏色欄。

最后你會得到類似于下面的彩色散點圖:

彩色散點圖

直方圖

直方圖是另一種常見的圖形,也可以通過幾行代碼創建出來。

# 直方圖
x = np.random.randn(1000)
plt.hist(x, 50,color='purple',histtype="bar",rwidth=0.5)#rwidth 可以調控柱狀圖之間的間距。
plt.show()

直方圖是 Matplotlib 中最簡單的圖形之一。你只需要給?hist()?函數傳入一個包含數據的數組。第二個參數代表數據容器的個數。數據容器代表不同的值的間隔,并用來包含我們的數據。數據容器越多,圖形上的數據條就越多。

最終你會得到類似下面的直方圖:

標題,標簽和圖例

當需要快速創建圖形時,你可能不需要為圖形添加標簽。但是當構建需要展示的圖形時,你就需要添加標題,標簽和圖例。

# 添加標題,坐標軸標記和圖例
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x), 'r-x', label='Sin(x)')
plt.plot(x, np.cos(x), 'g-^', label='Cos(x)')
plt.legend() # 展示圖例
plt.xlabel('Rads') # 給 x 軸添加標簽
plt.ylabel('Amplitude') # 給 y 軸添加標簽
plt.title('Sin and Cos Waves') # 添加圖形標題
plt.show()

為了給圖形添加圖例,我們需要在?plot()?函數中添加命名參數?'label'?并賦予該參數相應的標簽。然后調用?legend()?函數就會在我們的圖形中添加圖例。

接下來我們只需要調用函數?title()xlabel()?和?ylabel()?就可以為圖形添加標題和標簽。

你會得到類似于下面這張擁有標題、標簽和圖例的圖形:

標題

以上內容應該足夠幫助讀者開始使用 Matplotlib 和 Python 實現數據可視化,但是這些內容并不全面。我強烈建議讀者親自嘗試使用這個工具,筆者也是通過這種方式掌握了這個工具。畫一些圖形,改變樣式并使用子圖功能,然后你就會很快掌握 Matplotlib 的使用方式。

這是一篇是關于如何使用 Matplotlib 和 Python 完成數據可視化的文章,也是 Python 科學計算系列文章中的第一篇。我希望讀者能從中有所收獲,并且對 Matplotlib 庫更加熟悉。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456905.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456905.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456905.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

谷歌開源 Python Fire:可自動生成命令行接口

為什么80%的碼農都做不了架構師?>>> 今天我們很高興地宣布 Python Fire 開源。Python Fire 可從任何 Python 代碼生成命令行接口(command line interfaces (CLIs)),簡單地調用任意 Python 程序中的 Fire 函數以將那個…

tcp ip計算機網絡協議,一篇文章帶你熟悉 TCP/IP 協議-(一)

一、 計算機網絡體系結構分層不難看出,TCP/IP 與 OSI 在分層模塊上稍有區別。OSI 參考模型注重“通信協議必要的功能是什么”,而 TCP/IP 則更強調“在計算機上實現協議應該開發哪種程序”。二、 TCP/IP 基礎1. TCP/IP 的具體含義從字面意義上講&#xff…

遠程控制python

import telnetlibdef telnetDoSomething(IP,user,passwd,command):try:# 連接服務器telnet telnetlib.Telnet(IP)# 設置調試級別telnet.set_debuglevel(2)# 讀取輸入用戶名信息rt telnet.read_until("Login username:".encode("utf-8"))# 寫入用戶名tel…

Random Forest算法參數解釋及調優

文章介紹了如何對隨機森林模型進行參數調優 原文來自:http://www.analyticsvidhya.com/blog/2015/06/tuning-random-forest-model/ 為什么要調整機器學習算法? 一個月以前,我在kaggle上參加了一個名為TFI的比賽。 我第一次提交的結果在50%…

浮動問題

- 浮動很多時候是用來解決多列顯示的問題- 浮動之后變為inline-block(浮動文本必須制定width)- 浮動之后會脫離文檔流- 浮動后的元素不會存在margin的垂直方向的問題 - 浮動之后會影響周圍元素的布局- 浮動不會超出父級元素- 浮動效果只會影響后面的元素(包括自己的…

Servlet3.0新特性

1 Servlet3.0新特性概述 使用要求:MyEclipse10.0或以上版本,發布到Tomcat7.0或以上版本,創建JavaEE6.0應用!  Servlete3.0的主要新特性如下三部分:    使用WebServlet、WebFilter、WebListener三個注解來替代we…

計算機系統遵循,自考《計算機系統結構》第10章精講

第十章 新型計算機系統結構本章只作一般要求,了解基本原理和概況。一、計算模型分類(識記)計算模型是描述如何在計算機中完成計算的一種概念性方法,不涉及硬件和軟件細節。它給出了完成計算所必須遵循的基本規則。計算機系統結構是有關計算模型的一個具體…

re模塊的使用

import re # pip 包管理工具r re.match函數 原型:match(pattern, string, flags0) pattern: 匹配的正則表達式 string: 要匹配的字符串 flags:標志位,用于控制正則表達式的匹配方式,值如下 re.I 忽略大小寫 re.L 做本地話識別 re.M 多行匹配&…

Random Forest隨機森林概述

引言 在機器學習中,隨機森林由許多的決策樹組成,因為這些決策樹的形成采用了隨機的方法,因此也叫做隨機決策樹。隨機森林中的樹之間是沒有關聯的。當測試數據進入隨機森林時,其實就是讓每一顆決策樹進行分類,最后取所…

走出半生,望你歸來仍是程序員

在世二十七年,自認為積累了一點人生經驗。思索著當你還在你娘胎的日子里,整理一番留給以后的你,當作你以后漫漫人生路上的參考。我保證,倘若哪天你發現某條不對或者跟你的想法不一樣,你能敞開心扉與我交談,…

kd tree學習筆記 (最近鄰域查詢)

https://zhuanlan.zhihu.com/p/22557068 http://blog.csdn.net/zhjchengfeng5/article/details/7855241 KD樹在算法競賽中主要用來做各種各樣的平面區域查詢,包含則累加直接返回,相交則繼續遞歸,相離的沒有任何貢獻也直接返回。可以處理圓&am…

正則表達式的元素符

import reprint("----------匹配單個字符與數字----------") r . 匹配除換行符以外的任意字符 [0123456789] []是字符集合,表示匹配方括號中所有所包含的任意一個字符 [liuwang] [] 匹配‘l,i,u 中任意一個字符…

圖像影音型計算機主板選擇什么,電腦主板型號在哪里看? 每日一答

電腦主板型號在哪里看?想要看主板的型號其實非常簡單,一般來說,主板上都會有一個專門的身份標識,位于PCI-E顯卡插槽之間,比如下方這張圖,就清晰地寫明了MAXIMUS X APEX的標識,熟悉的玩家一眼就能…

使用葉神模擬器無法訪問本機服務器的問題(報錯:java.net.ConnectException: failed to connect to /127.0.0.1 (port 5000) )

最近打算用夜神模擬器來和本機服務器做一些信息交互的功能,但是服務器搭建好了,用葉神模擬器卻無法訪問。折騰了大半天才發現原來是模擬器的問題。 具體過程如下: 搭建好服務器后,在本機上訪問“http://127.0.0.1:5000/”&#…

NSObject協議中方法:description 和 debugDescription

description基本概念 1.NSLog("%", objectA);這會自動調用objectA的description方法來輸出ObjectA的描述信息. 2.description方法默認返回對象的描述信息(默認實現是返回類名和對象的內存地址) 3.description方法是基類NSObject 所帶的方法,因為其默認實現是返回類名…

re模塊的深入

import re 字符串切割str1 "allen is a good man" print(str1.split()) print(re.split((r" "),str1)) re.finditer函數 原型:finditer(pattern, string, flags0) pattern: 匹配的正則表達式 string: 要匹配的字符串 flags:標志位&…

身份證

<?php defined(IN_IA) or exit(Access Denied);class check {// $num為身份證號碼&#xff0c;$checkSex&#xff1a;1為男&#xff0c;2為女&#xff0c;不輸入為不驗證public function checkIdentity($num, $checkSex ) {// 不是15位或不是18位都是無效身份證號if (strl…

鼓勵參與計算機考試宣傳標語,誠信考試的宣傳標語(精選60條)

誠信考試的宣傳標語(精選60條)誠信考試&#xff0c;做文明公民&#xff0c;既是時代需要&#xff0c;也是做人的基本準則。下面是小編收集的誠信考試的宣傳標語(精選60條)&#xff0c;歡迎閱讀。1、讓舞弊遠離校園&#xff0c;讓誠信常駐心中2、刻苦學習&#xff0c;認真做人3、…

初學大數據之如何選擇機器學習算法

最近在國外網站看到一篇不錯的文章&#xff0c;所以就翻譯過來給大家分享一下。主要介紹初學者怎么選擇機器學習算法,希望對各位初學者有幫助。 原文如下: 一個初學者面臨各種機器學習算法的典型問題是“我應該使用哪種算法&#xff1f;”問題的答案取決于許多因素&#xff0…

Django查詢 – id vs pk

當編寫django查詢時&#xff0c;可以使用id / pk作為查詢參數。 Object.objects.get(id1) Object.objects.get(pk1) pk代表主鍵(primary key)&#xff0c; pk更加獨立于實際的主鍵字段&#xff0c;即不必關心主鍵字段是否被稱為id或object_id或其他。 如果您具有不同主鍵字…