數據分析與展示---Matplotlib基本繪圖函數


一:基本繪圖函數(這里介紹16個,還有許多其他的)

二:pyplot餅圖plt.pie的繪制

三:pyplot直方圖plt.hist的繪制

(一)修改第二個參數bins:代表直方圖的個數,均分為多段,取其中的每段均值

 (二)normed為1代表我們要使用歸一化數據(所占比例)在y軸,為0表示每個期間所占個數

四:pyplot極坐標圖bar的繪制(角度空間內展示效果不錯,在生活中不常用)

五:pyplot散點圖的繪制(面向對象繪制:各種繪制函數變為當前圖表區域對象的方法,這是推薦的方法

六:引力波的繪制

一:基本繪圖函數(這里介紹16個,還有許多其他的)

二:pyplot餅圖plt.pie的繪制

import matplotlib
import matplotlib.pyplot as plt

labels = 'Frogs','Hogs','Dogs','Logs'
sizes = [15,30,45,10]  #這是各個區域所占的大小,不一定是100,會自動換算為百分比
explode = (0,0.1,0,0)  #0.1是表示這個區域突出的程度

plt.pie(sizes,explode=explode,labels=labels,autopct="%1.1f%%",shadow=False,startangle=90)  #explode是突出比例,startangle起始角度
plt.show()

plt.axis("equal")  #將餅圖變水平

 

 

三:pyplot直方圖plt.hist的繪制

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
mu,sigma = 100,20 #均值和標准差
a = np.random.normal(mu,sigma,size=100)  #正態分布,size=100,表示一維數組,長度100

plt.hist(a,20,normed=1,histtype="stepfilled",facecolor="b",alpha=0.75)
plt.title("Histogram")

plt.show()

def hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False,
         bottom=None, histtype='bar', align='mid', orientation='vertical',
         rwidth=None, log=False, color=None, label=None, stacked=False,
         hold=None, data=None, **kwargs):

 

(一)修改第二個參數bins:代表直方圖的個數,均分為多段,取其中的每段均值

plt.hist(a,10,normed=1,histtype="stepfilled",facecolor="b",alpha=0.75)

 

plt.hist(a,20,normed=1,histtype="stepfilled",facecolor="b",alpha=0.75)

 

 

plt.hist(a,40,normed=1,histtype="stepfilled",facecolor="b",alpha=0.75)

 

 (二)normed為1代表我們要使用歸一化數據(所占比例)在y軸,為0表示每個期間所占個數

plt.hist(a,20,normed=1,histtype="stepfilled",facecolor="b",alpha=0.75)

 

 

plt.hist(a,20,normed=0,histtype="stepfilled",facecolor="b",alpha=0.75)

 

 

四:pyplot極坐標圖的繪制(角度空間內展示效果不錯,在生活中不常用)

import numpy as np
import matplotlib.pyplot as plt   
  
N = 20  #表示極坐標圖中數據的個數
theta = np.linspace(0.0,2*np.pi,N,endpoint=False)  #起始值0,結束值2∏,元素個數(等分角度),是否將最后結束值放入數據
radii = 10*np.random.rand(N)  #生成每個元素對應的值,一維數組含20列
width = np.pi/4*np.random.rand(N)  #∏/4*np.random..rand(N)  生成寬度值

ax = plt.subplot(111,projection="polar")  #111繪制一個繪圖區域,projection給出了polar繪制極坐標圖的指示
bars = ax.bar(theta,radii,width=width,bottom=0.0)  #left(繪制極坐標區域中那些顏色區域的時候是從哪開始的<角度>),height(中心點到邊緣的長度),width(每個繪圖區域在角度范圍內輻射的面積) for r,bar in zip(radii,bars):
    bar.set_facecolor(plt.cm.viridis(r/10.))  #使用for循環對每一個繪圖區域進行顏色和透明度的設置,若是沒有這個那么全是藍色
    bar.set_alpha(0.5)
    
plt.show()

 

修改N和width

N = 10
width = np.pi/2*np.random.rand(N)

 五:pyplot散點圖的繪制(面向對象繪制:各種繪制函數變為當前圖表區域對象的方法,這是推薦的方法

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()  #返回圖表以及圖表相關的區域,為空代表繪制區域為111
ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')  #randn標准正態分布,有100個元素在一維數組中,乘以10,使值分布大些,plot參數x,y‘o’是實心圓標記
ax.set_title("Simple Scatter")

plt.show()

 

補充:

subplots和subplot方法作用相似:

subplots會返回一個圖表和圖表相關的區域
subplot只會返回區域

六:引力波的繪制

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile   #讀取波形文件的庫

rate_h, hstrain = wavfile.read(r"H1_Strain.wav")    #讀取下載好的音頻文件,當文件符里面出現反斜杠時等轉義特殊字符時,在字符前面添加2,表示原始的字符串
rate_l, hstrain = wavfile.read(r"L1_Strain.wav")    #將結果賦給速率rate和數據strain
reftime,ref_H1 = np.genfromtxt("wf_template.txt").transpose()   #獲取提供的理論模型,時間序列和信號的數據

htime_interval = 1/rate_h #求倒數,獲取波形的時間間隔
ltime_interval = 1/rate_l

htime_len = hstrain.shape[0]/rate_h #hstrain是一個矩陣,shape[0]代表當前第一維度數據,數據點的個數,初一相應的rate,就可以獲取在坐標軸上的總長度
htime = np.arange(-htime_len/2,htime_len/2,htime_interval) #繪制以原點為中心對稱圖形
ltime_len = lstrain.shape[0]/rate_h
ltime = np.arange(-ltime_len/2,ltime_len/2,ltime_interval)


fig = plt.figure(figsize=(12,6)) #創建一個大小為12*6的繪圖區域

plth = fig.add_subplot(221) #將窗口繪制為2*2區域選取第1個區域
plth.plot(htime,hstrain,'y')
plth.set_xlabel("Time(Second)")
plth.set_ylabel("H1 Strain")
plth.set_title("H1 Strain")

plth = fig.add_subplot(222) #將窗口繪制為2*2區域選取第2個區域
plth.plot(ltime,lstrain,'g')
plth.set_xlabel("Time(Second)")
plth.set_ylabel("L1 Strain")
plth.set_title("L1 Strain")

plth = fig.add_subplot(212) #在這個圖表分為兩行一列取第二行
plth.plot(reftime,ref_H1)
plth.set_xlabel("Time(Second)")
plth.set_ylabel("Template Strain")
plth.set_title("Template")
fig.tight_layout()

fig.tight_layout()  #自動調整圖像外部邊緣

plt.savefig("./Gravitational_Waves_Original.png")
plt.show()
plt.close(fig)

 

 

#genfromtxt主要執行兩個運算循環,第一個是將文件每一行都轉換為字符串序列,第二個循環是將每個字符串序列轉換為相應的數據類型,
#使用genfromtxt獲取的是一個兩行的矩陣
#使用transpose進行轉置,賦給兩個數組
'''
[1,2]
[2,3]
[2,4]
.....
[5,6]
------------>轉置
[1,2,2,...,5]
[2,3,4,...,6]
''' 

總結

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM