Python Matplotlib數(shù)據(jù)可視化模塊使用詳解
本文主要介紹python 數(shù)據(jù)可視化模塊 Matplotlib,并試圖對(duì)其進(jìn)行一個(gè)詳盡的介紹。
通過(guò)閱讀本文,你可以:
- 了解什么是 Matplotlib
- 掌握如何用 Matplotlib 繪制各種圖形(柱狀圖、餅狀圖、直方圖等)
- 掌握如何定制圖形的顏色和樣式
- 掌握如何用 Matplotlib 繪制三維圖
前言
為了將數(shù)據(jù)變成所有人都喜歡的圖形,就需要使用本文要介紹的數(shù)據(jù)可視化庫(kù)Matplotlib。當(dāng)然,還有很多類(lèi)似的程序庫(kù)。但 Matplotlib 的功能更強(qiáng)大,而且可以很容易與Numpy、Pandas 等程序庫(kù)結(jié)合在一起使用。
Matplotlib 是一個(gè) Python 的 2D 繪圖庫(kù)。通過(guò) Matplotlib,開(kāi)發(fā)者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯(cuò)誤圖,散點(diǎn)圖等。學(xué)習(xí) Matplotlib,可讓數(shù)據(jù)可視化,更直觀的真實(shí)給用戶。使數(shù)據(jù)更加客觀、更具有說(shuō)服力。 Matplotlib 是 Python的庫(kù),又是開(kāi)發(fā)中常用的庫(kù)。
1 matplotlib 開(kāi)發(fā)環(huán)境搭建
如果使用的是 Anaconda Python 開(kāi) 發(fā) 環(huán) 境 , 那 么Matplotlib 已 經(jīng) 被 集 成 進(jìn)Anaconda,并不需要單獨(dú)安裝。
如果使用的是標(biāo)準(zhǔn)的Python 開(kāi)發(fā)環(huán)境,可以使用下面的命令安裝 Matplotlib,語(yǔ)法格式如下:
pip install matplotlib
如果要了解 Matplotlib 更詳細(xì)的情況,請(qǐng)?jiān)L問(wèn)官方網(wǎng)站。網(wǎng)址如下:https://matplotlib.org。
安裝完 Matplotlib 后,可以測(cè)試一下 Matplotlib 是否安裝成功。進(jìn)入 Python 的環(huán)境使用下面的語(yǔ)句導(dǎo)入 matplotlib.pyplot 模塊。如果不出錯(cuò),就說(shuō)明 Matplotlib 已經(jīng)安裝成功了。
import matplotlib.pyplot as plt
2 繪制基礎(chǔ)
在使用 Matplotlib 繪制圖形時(shí),其中有兩個(gè)最為常用的場(chǎng)景。一個(gè)是畫(huà)點(diǎn),一個(gè)是畫(huà)線。
pyplot 基本方法的使用如下。

2.1 繪制直線
在使用 Matplotlib 繪制線性圖時(shí),其中最簡(jiǎn)單的是繪制線圖。在下面的實(shí)例代碼中,使用 Matplotlib 繪制了一個(gè)簡(jiǎn)單的直線。具體實(shí)現(xiàn)過(guò)程如下:
- 導(dǎo)入模塊 pyplot,并給它指定別名 plt,以免反復(fù)輸入 pyplot。在模塊 pyplot中包含很多用于生產(chǎn)圖表的函數(shù)。
- 將繪制的直線坐標(biāo)傳遞給函數(shù) plot()。
- 通過(guò)函數(shù) plt.show()打開(kāi) Matplotlib 查看器,顯示繪制的圖形。
【示例 1】使用 matplotlib 根據(jù)兩點(diǎn)繪制一條線
import matplotlib.pyplot as plt #將(0,1)點(diǎn)和(2,4)連起來(lái) plt.plot([0,2],[1,4]) plt.show()

2.2 繪制折線
在上述的實(shí)例代碼中,使用兩個(gè)坐標(biāo)繪制一條直線,接下來(lái)使用平方數(shù)序列 1、4、9、16 和 25 來(lái)繪制一個(gè)折線圖。
【示例 2】使用 matplotlib 繪制折線圖
import matplotlib.pyplot as plt x=[1,2,3,4,5] squares=[1,4,9,16,25] plt.plot(x,squares) plt.show()

2.3 設(shè)置標(biāo)簽文字和線條粗細(xì)
在上面的實(shí)例直線結(jié)果不夠完美,開(kāi)發(fā)者可以繪制的線條樣式進(jìn)行靈活設(shè)置。例如:可以設(shè)置線條的粗細(xì)、設(shè)置文字等。
【示例 3】使用 matplotlib 繪制折線圖并設(shè)置樣
import matplotlib.pyplot as plt
datas=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.plot(datas,squares,linewidth=5)
#設(shè)置線條寬度#設(shè)置圖標(biāo)標(biāo)題,并在坐標(biāo)軸上添加標(biāo)簽plt.title('Numbers',fontsize=24)
plt.xlabel('datas',fontsize=14)
plt.ylabel('squares',fontsize=14)
plt.show()

Matplotlib 默認(rèn)情況不支持中文,可以使用以下簡(jiǎn)單的方法來(lái)解決:
plt.rcParams['font.sans-serif']=['SimHei'] #用來(lái)正常顯示中文標(biāo)簽
【示例 4】解決標(biāo)簽、標(biāo)題中的中文問(wèn)題
import matplotlib.pyplot as plt
datas=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.plot(datas,squares,linewidth=5)
#設(shè)置線條寬度#設(shè)置中文亂碼問(wèn)題
plt.rcParams['font.sans-serif'] = ['SimHei']
#設(shè)置圖標(biāo)標(biāo)題,并在坐標(biāo)軸上添加標(biāo)簽
plt.title('標(biāo)題設(shè)置',fontsize=24)
plt.xlabel('x 軸',fontsize=14)
plt.ylabel('y 軸',fontsize=14)
plt.show()

2.4 繪制一元二次方程的曲線 y=x^2
Matplotlib 有很多函數(shù)用于繪制各種圖形,其中 plot 函數(shù)用于曲線,需要將 200 個(gè)點(diǎn)的x 坐標(biāo)和 Y 坐標(biāo)分別以序列的形式傳入 plot 函數(shù),然后調(diào)用 show 函數(shù)顯示繪制的圖形。一元二次方程的曲線。
【示例 5】使用 matplotlib 繪制一元二次方程曲線
import matplotlib.pyplot as plt
#200 個(gè)點(diǎn)的 x 坐標(biāo)
x=range(-100,100)
#生成 y 點(diǎn)的坐標(biāo)
y=[i**2 for i in x ]
#繪制一元二次曲線
plt.plot(x,y)
#調(diào)用 savefig 將一元二次曲線保存為 result.jpg
#plt.savefig('result.jpg') #如果直接寫(xiě)成 plt.savefig('cos') 會(huì)生成 cos.png
plt.show()

2.5 繪制正弦曲線和余弦曲線
使用 plt 函數(shù)繪制任何曲線的第一步都是生成若干個(gè)坐標(biāo)點(diǎn)(x,y),理論上坐標(biāo)點(diǎn)是越多越好。本例取 0 到 10 之間 100 個(gè)等差數(shù)作為 x 的坐標(biāo),然后將這 100 個(gè) x 坐標(biāo)值一起傳入 Numpy 的 sin 和 cos 函數(shù),就會(huì)得到 100 個(gè) y 坐標(biāo)值,最后就可以使用 plot 函數(shù)繪制正弦曲線和余弦曲線。
【示例 6】使用 matplotlib 繪制正弦曲線和余弦曲線
import matplotlib.pyplot as plt import numpy as np #生成 x 的坐標(biāo)(0-10 的 100 個(gè)等差數(shù)列) x=np.linspace(0,10,100) sin_y=np.sin(x) #繪制正弦曲線 plt.plot(x,sin_y) #繪制余弦曲線 cos_y=np.cos(x) plt.plot(x,cos_y) plt.show()

上面的示例可以看到,調(diào)用兩次 plot 函數(shù),會(huì)將 sin 和 cos 曲線繪制到同一個(gè)二維坐標(biāo)系中,如果想繪制到兩張畫(huà)布中,可以調(diào)用 subplot()函數(shù)將畫(huà)布分區(qū)。
import matplotlib.pyplot as plt import numpy as np #將畫(huà)布分為區(qū)域,將圖畫(huà)到畫(huà)布的指定區(qū)域 x=np.linspace(1,10,100) #將畫(huà)布分為 2 行 2 列,將圖畫(huà)到畫(huà)布的 1 區(qū)域 plt.subplot(2,2,1) plt.plot(x,np.sin(x)) plt.subplot(2,2,3) plt.plot(x,np.cos(x)) plt.show()

3 繪制散點(diǎn)圖
使用 scatter 函數(shù)可以繪制隨機(jī)點(diǎn),該函數(shù)需要接收 x坐標(biāo)和 y 坐標(biāo)的序列。
【示例 8】使用 matplotlib 繪制 sin()函數(shù)的散點(diǎn)圖
import matplotlib.pyplot as plt import numpy as np #畫(huà)散點(diǎn)圖 x=np.linspace(0,10,100) #生成 0 到 10 中 100 個(gè)等差數(shù) plt.scatter(x,np.sin(x)) plt.show()

【示例 9】繪制 10 種大小 100 種顏色的散點(diǎn)圖
import matplotlib.pyplot as plt import numpy as np # 畫(huà) 10 種大小, 100 種顏色的散點(diǎn)圖 np.random.seed(0) x=np.random.rand(100) y=np.random.rand(100) colors=np.random.rand(100) size=np.random.rand(100)*1000 plt.scatter(x,y,c=colors,s=size,alpha=0.7) plt.show()

作為線性圖的替代,可以通過(guò)向 plot() 函數(shù)添加格式字符串來(lái)顯示離散值。 可以使用如表 2-2 格式化字符。


顏色的縮寫(xiě)如下:

【示例 10】繪制不同種類(lèi)不同顏色的線
import matplotlib.pyplot as plt import numpy as np #不同種類(lèi)不同顏色的線 x=np.linspace(0,10,100) plt.plot(x,x+0,'-g') #實(shí)線 綠色 plt.plot(x,x+1,'--c') #虛線 淺藍(lán)色 plt.plot(x,x+2,'-.k') #點(diǎn)劃線 黑色 plt.plot(x,x+3,'-r') #實(shí)線 紅色 plt.plot(x,x+4,'o') #點(diǎn) 默認(rèn)是藍(lán)色 plt.plot(x,x+5,'x') #叉叉 默認(rèn)是藍(lán)色 plt.plot(x,x+6,'d') #磚石 紅色 plt.show()

【示例 11】添加圖例
#不同種類(lèi)不同顏色的線并添加圖例 x=np.linspace(0,10,100) plt.plot(x,x+0,'-g',label='-g') #實(shí)線 綠色 plt.plot(x,x+1,'--c',label='--c') #虛線 淺藍(lán)色 plt.plot(x,x+2,'-.k',label='-.k') #點(diǎn)劃線 黑色 plt.plot(x,x+3,'-r',label='-r') #實(shí)線 紅色 plt.plot(x,x+4,'o',label='o') #點(diǎn) 默認(rèn)是藍(lán)色 plt.plot(x,x+5,'x',label='x') #叉叉 默認(rèn)是藍(lán)色 plt.plot(x,x+6,'dr',label='dr') #磚石 紅色 #添加圖例右下角 lower right 左上角 upper left 邊框 透明度 陰影 邊框?qū)挾? plt.legend(loc='lower right',fancybox=True,framealpha=1,shadow=True,borderpad=1) plt.show()

4 繪制柱狀圖
使用 bar 函數(shù)可以繪制柱狀圖。柱狀圖需要水平的x 坐標(biāo)值,以及每一個(gè) x 坐標(biāo)值對(duì)應(yīng)的 y 坐標(biāo)值,從而形成柱狀的圖。柱狀圖主要用來(lái)縱向?qū)Ρ群蜋M向?qū)Ρ鹊?。例如,根?jù)年份對(duì)銷(xiāo)售收據(jù)進(jìn)行縱向?qū)Ρ?,x 坐標(biāo)值就表示年份,y 坐標(biāo)值表示銷(xiāo)售數(shù)據(jù)。
【示例 12】使用 bar()繪制柱狀圖,并設(shè)置柱的寬度
import matplotlib.pyplot as plt
import numpy as np
x=[1980,1985,1990,1995]
x_labels=['1980 年','1985 年','1990 年','1995 年']
y=[1000,3000,4000,5000]
plt.bar(x,y,width=3)
plt.rcParams['font.sans-serif']=['SimHei'] #用來(lái)正常顯示中文標(biāo)簽
plt.xticks(x,x_labels)
plt.xlabel('年份')
plt.ylabel('銷(xiāo)量')
plt.title('根據(jù)年份銷(xiāo)量對(duì)比圖')
plt.show()

需要注意的是 bar 函數(shù)的寬度并不是像素寬度。bar 函數(shù)會(huì)根據(jù)二維坐標(biāo)系的尺寸,以及 x 坐標(biāo)值的多少,自動(dòng)確定每一個(gè)柱的寬度,而 width 指定的寬度就是這個(gè)標(biāo)準(zhǔn)柱寬度的倍數(shù)。該參數(shù)值可以是浮點(diǎn)數(shù),如 0.5,表示柱的寬度是標(biāo)準(zhǔn)寬度的 0.5 倍。
【示例 13】使用 bar()和 barh()函數(shù)繪制柱狀圖
import matplotlib.pyplot as plt import numpy as np np.random.seed(0) x=np.arange(5) y=np.random.randint(-5,5,5) print(x,y) # 將畫(huà)布分隔成一行兩列 plt.subplot(1,2,1) #在第一列中畫(huà)圖 v_bar=plt.bar(x,y) #在第一列的畫(huà)布中 0 位置畫(huà)一條藍(lán)線 plt.axhline(0,color='blue',linewidth=2) plt.subplot(1,2,2) #barh 將 y 和 x 軸對(duì)換 豎著方向?yàn)?x 軸 h_bar=plt.barh(x,y,color='red') #在第二列的畫(huà)布中 0 位置處畫(huà)藍(lán)色的線 plt.axvline(0,color='red',linewidth=2) plt.show()

【示例 14】對(duì)柱狀圖的部分柱狀設(shè)置顏色
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
v_bar=plt.bar(x,y,color='lightblue')
for bar,height in zip(v_bar,y):
if height<0:
bar.set(edgecolor='darkred',color='lightgreen',linewidth=3)
plt.show()

【示例 15】使用 bar()繪制三天中三部電影的票房變化
import matplotlib.pyplot as plt
import numpy as np
#三天中三部電影的票房變化
real_names=['千與千尋','玩具總動(dòng)員 4','黑衣人:全球追緝']
real_num1=[5453,7548,6543]
real_num2=[1840,4013,3421]
real_num3=[1080,1673,2342]
#生成 x 第 1 天 第 2 天 第 3 天
x=np.arange(len(real_names))
x_label=['第{}天'.format(i+1) for i in range(len(real_names))]
#繪制柱狀圖#設(shè)置柱的寬度
width=0.3
plt.bar(x,real_num1,color='g',width=width,label=real_names[0])
plt.bar([i+width for i in x],real_num2,color='b',width=width,label=real_names[1])
plt.bar([i+2*width for i in x],real_num3,color='r',width=width,label=real_names[2])
plt.rcParams['font.sans-serif']=['SimHei'] #用來(lái)正常顯示中文標(biāo)簽
#修改 x 坐標(biāo)
plt.xticks([i+width for i in x],x_label)
#添加圖例plt.legend() #添加標(biāo)題
plt.title('3 天的票房數(shù)')
plt.show()

5 繪制餅狀圖
pie 函數(shù)可以繪制餅狀圖,餅圖主要是用來(lái)呈現(xiàn)比例的。只要傳入比例數(shù)據(jù)即可。
【示例 16】繪制餅狀圖
#導(dǎo)入模塊
import matplotlib.pyplot as plt
import numpy as np
#準(zhǔn)備男、女的人數(shù)及比例
man=71351
woman=68187
man_perc=man/(woman+man)
woman_perc=woman/(woman+man) #添加名稱
labels=['男','女'] #添加顏色
colors=['blue','red'] #繪制餅狀圖 pie
plt.rcParams['font.sans-serif']=['SimHei'] #用來(lái)正常顯示中文標(biāo)簽
# labels 名稱 colors:顏色,explode=分裂 autopct 顯示百分比
paches,texts,autotexts=plt.pie([man_perc,woman_perc],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%')
#設(shè)置餅狀圖中的字體顏色
for text in autotexts:
text.set_color('white')
#設(shè)置字體大小
for text in texts+autotexts:
text.set_fontsize(20)
plt.show()

6 繪制直方圖
直方圖與柱狀圖的分格類(lèi)似,都是由若干個(gè)柱組成,但直方圖和柱狀圖的含義卻有很大的差異。直方圖
是用來(lái)觀察分布狀態(tài)的,而柱狀圖是用來(lái)看每一個(gè) X 坐標(biāo)對(duì)應(yīng)的 Y 的值的。也就是說(shuō),直方圖關(guān)注的是分布,并不關(guān)心具體的某個(gè)值,而柱狀圖關(guān)心的是具體的某個(gè)值。使用 hist函數(shù)繪制直方圖。
【示例 17】繪制直方圖
import numpy as np import matplotlib.pyplot as plt #頻次直方圖,均勻分布 #正太分布 x=np.random.randn(1000) #畫(huà)正太分布圖 # plt.hist(x) plt.hist(x,bins=100) #裝箱的操作,將 10 個(gè)柱裝到一起及修改柱的寬度 plt.show()

【示例 18】同一畫(huà)布繪制三個(gè)直方圖
import numpy as np import matplotlib.pyplot as plt #幾個(gè)直方圖畫(huà)到一個(gè)畫(huà)布中,第一個(gè)參數(shù)期望 第二個(gè)均值 x1=np.random.normal(0,0.8,1000) x2=np.random.normal(-2,1,1000) x3=np.random.normal(3,2,1000) #參數(shù)分別是 bins:裝箱,alpha:透明度 kwargs=dict(bins=100,alpha=0.4) plt.hist(x1,**kwargs) plt.hist(x2,**kwargs) plt.hist(x3,**kwargs) plt.show()

7 繪制等高線圖
【 示例 19 】使用matplotlib 繪制等高線圖
#導(dǎo)入模塊 import matplotlib.pyplot as plt import numpy as np x=np.linspace(-10,10,100) y=np.linspace(-10,10,100) #計(jì)算 x 和 y 的相交點(diǎn) a X,Y=np.meshgrid(x,y) # 計(jì)算 Z 的坐標(biāo) Z=np.sqrt(X**2+Y**2) plt.contourf(X,Y,Z) plt.contour(X,Y,Z) # 顏色越深表示值越小,中間的黑色表示 z=0. plt.show()

8 繪制三維圖
使用 pyplot 包和 Matplotlib 繪制三維圖。
【示例 20】使用 Matplotlib 繪制三維圖
import matplotlib.pyplot as plt #導(dǎo)入 3D 包 from mpl_toolkits.mplot3d import Axes3D #創(chuàng)建 X、Y、Z 坐標(biāo) X=[1,1,2,2] Y=[3,4,4,3] Z=[1,100,1,1] fig = plt.figure() # 創(chuàng)建了一個(gè) Axes3D 的子圖放到 figure 畫(huà)布里面 ax = Axes3D(fig) ax.plot_trisurf(X, Y, Z) plt.show()

總結(jié)
以上就是我對(duì)數(shù)據(jù)可視化模塊 Matplotlib知識(shí)點(diǎn)的詳細(xì)介紹。
到此這篇關(guān)于Python Matplotlib數(shù)據(jù)可視化模塊使用詳解的文章就介紹到這了,更多相關(guān)Python Matplotlib內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3.5 Pandas模塊之DataFrame用法實(shí)例分析
這篇文章主要介紹了Python3.5 Pandas模塊之DataFrame用法,結(jié)合實(shí)例形式詳細(xì)分析了Python3.5中Pandas模塊的DataFrame結(jié)構(gòu)創(chuàng)建、讀取、過(guò)濾、獲取等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-04-04
Spring @Enable模塊驅(qū)動(dòng)原理及使用實(shí)例
這篇文章主要介紹了Spring @Enable模塊驅(qū)動(dòng)原理及使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Python關(guān)于excel和shp的使用在matplotlib
今天小編就為大家分享一篇關(guān)于Python關(guān)于excel和shp的使用在matplotlib,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
python給指定csv表格中的聯(lián)系人群發(fā)郵件(帶附件的郵件)
這篇文章主要介紹了python給指定csv表格中的聯(lián)系人群發(fā)郵件,本文通過(guò)代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
通過(guò)python掃描二維碼/條形碼并打印數(shù)據(jù)
這篇文章主要介紹了通過(guò)python掃描二維碼/條形碼并打印數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
pycharm不以pytest方式運(yùn)行,想要切換回普通模式運(yùn)行的操作
這篇文章主要介紹了pycharm不以pytest方式運(yùn)行,想要切換回普通模式運(yùn)行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
python?random模塊常用函數(shù)基礎(chǔ)教程
這篇文章主要為大家介紹了python?random模塊常用函數(shù)基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Django的用戶模塊與權(quán)限系統(tǒng)的示例代碼
這篇文章主要介紹了Django的用戶模塊與權(quán)限系統(tǒng)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07

