用于展示數(shù)據(jù)
1. Matplotlib庫入門
Python優(yōu)秀的數(shù)據(jù)可視化第三方庫
安裝
pip install -i https://mirrors.aliyun.com/pypi/simple/ matplotlib
官方圖形-代碼展示
Matplotlib庫由各種可視化類構(gòu)成对竣,matplotlib.pyplot庫是繪制各種可視化圖形的命令子庫,相當(dāng)于快捷方式
調(diào)用
import matplotlib.pyplot as plt
1.1 plot()
函數(shù)
plt.plot(x, y, format_string, **kwargs)
x
:x軸數(shù)據(jù)堕虹,列表或數(shù)組岂津,可選
y
:y軸數(shù)據(jù)虱黄,列表或數(shù)組
format_string
:控制曲線的格式字符串,可選
**kwargs
:第二組或更多x, y, format_string【多條曲線時(shí)吮成,x不能省略】
1.1.1 繪制一條曲線
# 調(diào)用matplotlib.pyplot庫橱乱,并給出約定別名
import matplotlib.pyplot as plt
a = [1, 2, 3, 4]
# 繪圖,接收一維參數(shù)粱甫,默認(rèn)是y軸的值硝皂。x軸是參數(shù)的索引
plt.plot(a)
# 設(shè)定y軸標(biāo)簽【不能用中文表示】
plt.ylabel('y')
# 將圖形存儲(chǔ)為文件冒掌,默認(rèn)PNG格式,通過dpi修改輸出質(zhì)量
plt.savefig('\\TDRDIS Book\\編程\\Python應(yīng)用\\pig\\text', dpi = 600)
# 展示
plt.show()
b = [2, 4, 4, 2]
# 接收2個(gè)參數(shù),分別對(duì)應(yīng)xy
plt.plot(a, b)
# 設(shè)定xy軸尺度:[x軸起盗忱、止值,y軸其起怔毛、止值]
plt.axis([-1, 5, 0, 5])
plt.show()
1.1.2 繪制多條曲線
import numpy as np
a = np.arange(10)
a # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
plt.plot(a, a*1.5, a, a*2.5, a, a*3)
plt.show()
format_string
由顏色字符左痢、風(fēng)格字符和標(biāo)記字符組成
顏色字符 | 說明 | 顏色字符 | 說明 |
---|---|---|---|
b |
藍(lán)色 | m |
洋紅色magenta |
g |
綠色 | y |
黃色 |
r |
紅色 | k |
黑色 |
c |
青綠色cyan | w |
白色 |
#008000 |
RGB某顏色 | 0.8 |
灰度值字符串 |
風(fēng)格字符:表示曲線的樣子
風(fēng)格字符 | 說明 | 風(fēng)格字符 | 說明 |
---|---|---|---|
'-' |
實(shí)線 | '--' |
破折線 |
'-.' |
點(diǎn)劃線 | ':' |
虛線 |
'' '' |
無線條 |
標(biāo)記字符:在曲線中的每個(gè)點(diǎn),采取什么樣的風(fēng)格
標(biāo)記字符 | 說明 | 標(biāo)記字符 | 說明 | 標(biāo)記字符 | 說明 |
---|---|---|---|---|---|
'.' |
點(diǎn) | '1' |
下花三角 | 'h' |
豎六邊形 |
',' |
像素 | '2' |
上花三角 | 'H' |
橫六邊形 |
'o' |
實(shí)心圈 | '3' |
左花三角 | '+' |
十字 |
'v' |
倒三角 | '4' |
右花三角 | 'x' |
x形 |
'^' |
上三角 | 's' |
實(shí)心方形 | 'D' |
菱形 |
'>' |
右三角 | 'p' |
實(shí)心五角 | 'd' |
瘦菱形 |
'<' |
左三角 | '*' |
星形 | '|' |
垂直線 |
plt.plot(a, a*1.5, 'go-.', a, a*2.5, '2--', a, a*3, 'y:', a, a*4, 'kp', a, a*5, 'b')
plt.show()
沒有給出顏色瞒大,系統(tǒng)自動(dòng)賦予一個(gè)不同于其他顏色的顏色
沒有給出風(fēng)格或標(biāo)記字符螃征,那就默認(rèn)沒有風(fēng)格或沒有標(biāo)記
沒有給出風(fēng)格和標(biāo)記字符,那就默認(rèn)是直線
其他參數(shù)命令控制顏色糠赦、風(fēng)格会傲、標(biāo)記字符等
color
:控制顏色,color = ’green‘拙泽;linestyle
:線條風(fēng)格淌山,linestyle = 'dashed';marker
:標(biāo)記風(fēng)格顾瞻,marker = ‘o'泼疑。與上面簡寫字符一一對(duì)應(yīng)
markerfacecolor
:每一個(gè)標(biāo)記的顏色,markerfacecolor = 'blue'荷荤;markersize
:每一個(gè)標(biāo)記的大小退渗,markersize = 20
1.2 中文顯示
1.2.1 rcParams修改字體
rcParams是pyplot用于改變?nèi)肿煮w的資源庫,使用時(shí)需要引入matplotlib庫
import matplotlib.pyplot as plt
import matplotlib
# 修改字體為中文字體蕴纳,SimHei是黑體
matplotlib.rcParams['font.family'] = 'SimHei'
a = [1, 2, 3, 4]
plt.plot(a)
plt.ylabel('y的值')
plt.show()
屬性 | 說明 |
---|---|
'font.family' |
用于顯示字體的名字 |
'font.style' |
字體風(fēng)格会油,正常'normal' 斜體'italic'
|
'font.size' |
字體大小,整數(shù)字號(hào)或者'large' 古毛、x-small'
|
中文字體 | 說明 | 中文字體 | 說明 |
---|---|---|---|
'SimHei' |
黑體 | 'Kaiti' |
楷體 |
'LiSu' |
隸書 | 'FangSong' |
仿宋 |
'YouYuan' |
幼圓 | 'STSong' |
華文宋體 |
1.2.1 fontproperties
局部改變字體翻翩,配合fontsize
使用
···pythonimport matplotlib.pyplot as plt
a = [1, 2, 3, 4]
plt.plot(a)
plt.ylabel('y的值', fontproperties = 'SimHei', fontsize = 20)
plt.xlabel('x的值', fontproperties = 'SimHei', fontsize = 40)
plt.show()
···
1.3 文本顯示
函數(shù) | 說明 |
---|---|
plt.ylabel() |
對(duì)Y軸增加文本標(biāo)簽 |
plt.xlabel() |
對(duì)X軸增加文本標(biāo)簽 |
plt.title() |
對(duì)圖形整體增加文本標(biāo)簽 |
plt.text() |
在任意位置增加文本標(biāo)簽 |
plt.annotate() |
在圖形中增加帶箭頭的注解 |
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.xlabel('橫軸:時(shí)間', fontproperties = 'SimHei', fontsize = 15, color = 'green')
plt.ylabel('縱軸:振幅', fontproperties = 'SimHei', fontsize = 15)
# 用一對(duì)$$引入Latex格式
plt.title(r'正弦波實(shí)例 $y=cos(2\pi x)$', fontproperties = 'SimHei', fontsize = 25)
# text(x,y,text):xy的坐標(biāo)都许,text:內(nèi)容
plt.text(2, 1, r'$\mu=100$', fontsize = 20)
plt.axis([-1, 6, -2, 2])
# 在圖形中加入網(wǎng)格
plt.grid(True)
plt.show()
plt.annotate(s, xy=arrow_crd, xytext=text_crd,arrowprops=dict)
s
:要注解的字符串
xy=arrow_crd
:箭頭所在位置
xytext=text_crd
:文本顯示位置
arrowprops=dict
:字典類型,定義整個(gè)顯示的一些屬性
a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.xlabel('橫軸:時(shí)間', fontproperties = 'SimHei', fontsize = 15, color = 'green')
plt.ylabel('縱軸:振幅', fontproperties = 'SimHei', fontsize = 15)
plt.title(r'正弦波實(shí)例 $y=cos(2\pi x)$', fontproperties = 'SimHei', fontsize = 25)
# shrink:箭頭2段的空白, width:箭頭大小
plt.annotate(r'$\mu=100$', xy = (2,1), xytext = (3, 1.5),
arrowprops = dict(facecolor = 'black', shrink = 0.2, width = 2))
plt.axis([-1, 6, -2, 2])
plt.grid(True)
plt.show()
1.4 子繪圖區(qū)域
1.4.1 簡單繪圖區(qū)域
plt.subplot(nrows, ncols, plot_number)
將繪圖區(qū)分割以
nrows
為行數(shù)量嫂冻,以ncols
為列數(shù)量的子區(qū)域胶征。
plot_number
:指明當(dāng)前繪圖區(qū)在哪個(gè)區(qū)域
書寫時(shí),可將逗號(hào)去掉
a = [1, 2, 3, 4]
b = [2, 4, 4, 2]
plt.subplot(2,1,1)
plt.plot(a)
plt.subplot(212)
plt.plot(a, b)
plt.show()
1.4.2 復(fù)雜繪圖區(qū)
-
plt.subplot2grid()
方法
plt.subplot2grid(GridSpec, CurSpec, colspan = 1, rowspan = 1)
能夠設(shè)定網(wǎng)格桨仿,選中網(wǎng)格睛低,確定選中行列區(qū)域數(shù)量,編號(hào)從0開始
GridSpec
:一個(gè)元組服傍,將區(qū)域分割成什么樣的網(wǎng)絡(luò)形狀
CurSpec
:當(dāng)前選定位置
colspan
:列的延伸
rowspan
:行的延伸
plt.subplot2grid((3,3),(0,0), colspan=3)
plt.subplot2grid((3,3),(1,0), colspan=2)
plt.subplot2grid((3,3),(1,2), rowspan=2)
plt.subplot2grid((3,3),(2,0))
plt.subplot2grid((3,3),(2,1))
- GridSpec類
# 導(dǎo)入GridSpec類[跟上圖同樣的區(qū)域圖]
import matplotlib.gridspec as gridspec
# 定義一個(gè)3行3列的網(wǎng)格
gs = gridspec.GridSpec(3,3)
# 在行上钱雷,選中第0行;在列上所有的列
ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,:-1])
ax3 = plt.subplot(gs[1:,-1])
ax4 = plt.subplot(gs[2,0])
ax5 = plt.subplot(gs[2,1])
2. 基礎(chǔ)繪圖函數(shù)
重點(diǎn)不是繪制圖形伴嗡,而是給數(shù)據(jù)找到合適展示方式
pyplot繪圖函數(shù) | 說明 |
---|---|
plt.plot(x,y,fmt,···) |
繪制一個(gè)坐標(biāo)圖 |
plt.boxplot(data,notch,position) |
繪制一個(gè)箱型圖 |
plt.bar(left,height,width,bottom) |
繪制一個(gè)條形圖圖 |
plt.barh(width,bottom,left,height) |
繪制一個(gè)橫向條形圖 |
plt.polar(left, height, withd) |
繪制極坐標(biāo)圖 |
plt.pie(date,explode) |
繪制餅圖 |
plt.psd(x,NFFT=256,pad_to,Fs) |
繪制功率譜密度圖 |
plt.specgram(x,NFFT=256,pad_to,F) |
繪制譜圖 |
plt.cohere(x,y,NFFT=256,Fs) |
繪制XY相關(guān)性函數(shù) |
plt.scatter(x,y) |
繪制散點(diǎn)圖 |
plt.step(x,y,where) |
繪制步階圖 |
plt.hist(x,bins,normed) |
繪制直方圖 |
plt.contour(X,Y,Z,N) |
繪制等值圖 |
plt.vilnes() |
繪制垂直圖 |
plt.stem(x,y,linefmt, markerfmt) |
繪制柴火圖 |
plt.plot_date() |
繪制數(shù)據(jù)日期 |
2.1 餅圖
import matplotlib.pyplot as plt
# 定義標(biāo)簽
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
# 定義標(biāo)簽打小
sizes = [15, 30, 45, 10]
# 指出第2塊被突出急波,突出打小為0.1
explode = (0,0.1, 0,0)
# autopct:表示顯示百分?jǐn)?shù)的方式;shadow:是二維還是有陰影瘪校;startangle:餅圖起始角度
plt.pie(sizes, explode=explode, labels=labels, autopct = '%1.1f%%',
shadow=False, startangle=90)
# 繪制過程中澄暮,xy方向應(yīng)該是相等的
plt.axis('equal')
plt.show()
2.2 直方圖
對(duì)于一個(gè)有若干元素的數(shù)組a,最小值和最大值之間構(gòu)成一個(gè)取值范圍阱扬。直方圖是將取值范圍均等的劃分bin個(gè)區(qū)間泣懊,圖形表示在某個(gè)區(qū)間有多少個(gè)元素
如,1麻惶,1馍刮,1,1窃蹋,3卡啰。劃分2個(gè)bin,其中4個(gè)1在第1個(gè)bin區(qū)間
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
mu, sigma = 100, 2
a = np.random.normal(mu, sigma, size = 100)
# bins= 20:表示生產(chǎn)圖形中直方的個(gè)數(shù)
# density = 1:將每一個(gè)直方中出現(xiàn)元素的個(gè)數(shù)歸一化為出現(xiàn)的概率
# density = 0:表示直方中出現(xiàn)元素的個(gè)數(shù)
plt.hist(a, 20, density = 1, histtype = 'stepfilled', facecolor = 'b', alpha = 0.75)
plt.title('Histogran')
plt.show()
2.3 極坐標(biāo)圖
plt.polar(left, height, withd)
left
:表示,極坐標(biāo)中警没,顏色區(qū)域從哪開始匈辱,表示圖中某一個(gè)位置
height
:表示中心的向邊緣繪制的長度
withd
:寬度,即每個(gè)繪圖區(qū)域的面積杀迹,這個(gè)面積是在角度范圍內(nèi)輻射
import matplotlib.pyplot as plt
import numpy as np
# 給出極坐標(biāo)圖中的個(gè)數(shù)
N= 20
# 從0-360度亡脸,按照個(gè)數(shù)等分出N個(gè)不同角度
theta = np.linspace(0.0, 2*np.pi, N, endpoint=False)
# 生成N個(gè)一維的數(shù)組,對(duì)應(yīng)每個(gè)角度對(duì)應(yīng)的值
radii = 10 * np.random.rand(N)
# 給出寬度值树酪,一組數(shù)組
width = np.pi / 4 * np.random.rand(N)
# 設(shè)定繪圖區(qū)域浅碾,并通過projection = 'polar'給出繪制極坐標(biāo)圖指示
# 采用面向?qū)ο罄L制極坐標(biāo)圖
ax = plt.subplot(111, projection = 'polar')
# 將繪圖區(qū)域賦值與一個(gè)參數(shù)
# ax是一個(gè)對(duì)象,采用bar方法將3個(gè)參數(shù)給bars
bars = ax.bar(theta, radii, width = width, bottom = 0.0)
# 采用for循環(huán)對(duì)每個(gè)區(qū)域進(jìn)行設(shè)定
for r, bar in zip(radii, bars):
bar.set_facecolor(plt.cm.viridis(r / 10))
bar.set_alpha(0.5)
plt.show()
在角度空間內(nèi)展示數(shù)據(jù)的類型
2.4 散點(diǎn)圖
plt.scatter(x,y)
'''面向?qū)ο罄L制散點(diǎn)圖'''
import numpy as np
import matplotlib.pyplot as plt
# 將subplots()函數(shù)變成一個(gè)對(duì)象
# 給出2個(gè)參數(shù)续语,分別對(duì)應(yīng)生成的圖表垂谢,以及圖表相關(guān)的區(qū)域
# plt.subplots():表明繪制區(qū)域是111,即只有一個(gè)繪制區(qū)域
fig, ax = plt.subplots()
# 在當(dāng)前繪制區(qū)域(ax)疮茄,繪制其中的點(diǎn)
# 'o':設(shè)定每一個(gè)點(diǎn)的類型
ax.plot(10*np.random.randn(100), 10*np.random.randn(100), 'o')
# 設(shè)定標(biāo)題
ax.set_title('Using hyphen instead of Unicode minus')
plt.show()
面向?qū)ο蟮姆椒?br>
plot()
函數(shù)和標(biāo)題設(shè)置函數(shù)埂陆,變成對(duì)象的方法苛白,而不再是plt
下面的函數(shù)
3. 引力波繪制
引力波:因?yàn)闀r(shí)空彎曲對(duì)外以輻射形式傳播的能量
數(shù)據(jù)源:2個(gè)聲音文件(真是宇宙引力波數(shù)據(jù)),1個(gè)txt文件(由科學(xué)家生成的希望用于對(duì)比的引力波模板文件)
# 科學(xué)計(jì)算庫
import numpy as np
# 繪圖庫
import matplotlib.pyplot as plt
# 讀取波形文件庫
from scipy.io import wavfile
# 讀取音頻文件
rate_h, hstrain= wavfile.read(r"E:\TDRDIS Book\編程\Python應(yīng)用\引力波數(shù)據(jù)源\H1_Strain.wav","rb")
rate_l, lstrain= wavfile.read(r"E:\TDRDIS Book\編程\Python應(yīng)用\引力波數(shù)據(jù)源\L1_Strain.wav","rb")
# reftime是時(shí)間序列焚虱,ref_H1是數(shù)據(jù)
# np.genfromtxt()執(zhí)行2個(gè)循環(huán),1)將文件的每一行都轉(zhuǎn)化成字符串懂版,2)將每個(gè)字符串轉(zhuǎn)化成相應(yīng)的數(shù)據(jù)類型
# transpose() 將數(shù)據(jù)轉(zhuǎn)置
reftime, ref_H1 = np.genfromtxt(r'E:\TDRDIS Book\編程\Python應(yīng)用\引力波數(shù)據(jù)源\wf_template.txt').transpose()
# 得到波形的時(shí)間間隔
htime_interval = 1/rate_h
ltime_interval = 1/rate_l
# 創(chuàng)建一個(gè)大小為12*6的繪圖空間
fig = plt.figure(figsize=(12, 6))
# 丟失信號(hào)起始點(diǎn)
# hstrain是一個(gè)數(shù)據(jù)矩陣鹃栽,shape[0]表示讀取矩陣的第一維度的長度,即數(shù)據(jù)個(gè)數(shù)躯畴,
# /rate_h:得到函數(shù)在坐標(biāo)軸中的總長度
htime_len = hstrain.shape[0]/rate_h
# 以原點(diǎn)為中心民鼓,設(shè)置起止點(diǎn),以htime_interval為時(shí)間間隔
htime = np.arange(-htime_len/2, htime_len/2 , htime_interval)
# 在第1個(gè)子圖繪制圖片
plth = fig.add_subplot(221)
plth.plot(htime, hstrain, 'y')
plth.set_xlabel('Time (seconds)')
plth.set_ylabel('H1 Strain')
plth.set_title('H1 Strain')
ltime_len = lstrain.shape[0]/rate_l
ltime = np.arange(-ltime_len/2, ltime_len/2 , ltime_interval)
pltl = fig.add_subplot(222)
pltl.plot(ltime, lstrain, 'g')
pltl.set_xlabel('Time (seconds)')
pltl.set_ylabel('L1 Strain')
pltl.set_title('L1 Strain')
pltref = fig.add_subplot(212)
pltref.plot(reftime, ref_H1)
pltref.set_xlabel('Time (seconds)')
pltref.set_ylabel('Template Strain')
pltref.set_title('Template')
# 自動(dòng)調(diào)節(jié)圖像外部邊緣
fig.tight_layout()
# 保存圖像
plt.savefig(r"E:\TDRDIS Book\編程\Python應(yīng)用\pig\Gravitational_Waves_Original.png")
plt.show()
plt.close(fig)
目錄:Python數(shù)據(jù)分析與展示
一蓬抄、NumPy庫
二丰嘉、Matplotlib庫
三、Pandas庫