Python matplotlib.pyplot.hist()繪制直方圖的方法實例

一、matplotlib.pyplot.hist()語法

hist(x, bins=None, range=None, density=False,weights=None, cumulative=False, 
bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None,
 log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)
plt.hist(
    x,# 指定要繪制直方圖的數據
    bins,# 設置長條形的數目
    range,# 指定直方圖數據的上下界,默認包含繪圖數據的最大值和最小值(范圍)
    density=True or False, # 如果"True",將y軸轉化為密度刻度 默認為None
    weights,# 該參數可為每一個數據點設置權重
    cumulative=True or False,# 是否需要計算累計頻數或頻率 默認值False
    bottom=0, # 可以為直方圖的每個條形添加基準線,默認為0
    histtype={'bar', 'barstacked', 'step', 'stepfilled'} # 設置樣式
               # bar柱狀形數據並排,默認值。
               # barstacked在柱狀形數據重疊並排(相同的在一起)
               # step柱狀形顏色不填充 
               # stepfilled填充的線性
    align='mid' or 'left' or 'right', # 設置條形邊界值的對其方式,默認為mid,除此還有'left'和'right'
    orientation={'vertical', 'horizontal'},# 設置直方圖的擺放方向,默認為垂直方向vertical
    rwidth,# 設置直方圖條形寬度的百分比
    log=True or False,# 是否需要對繪圖數據進行log變換 默認值False
    color='r',# 設置直方圖的填充色
    label, # 設置直方圖的標簽
    stacked=True or False, # 當有多個數據時,是否需要將直方圖呈堆疊擺放,默認False水平擺放;
    facecolor,# 設置長條形顏色(和color效果一致,設置color就不用再設置facecolor)
    edgecolor,# 設置邊框的顏色
    alpha # 設置透明度  
)
# 註意組距,得到滿意的展示效果
# 註意y軸所代表的變量是頻數還是頻率

二、繪制直方圖

①繪制簡單直方圖

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
# bins設置長條形的數目
plt.hist(data,bins=10)
 
plt.show()

②:各個參數繪制的直方圖

(1)histtype參數(設置樣式bar、barstacked、step、stepfilled)

1. bar:柱狀形數據並排(因為bar是默認值,可以不寫)

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10)
 
plt.show()

 2. barstacked:在柱狀形數據重疊並排(相同的在一起)

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,histtype='barstacked')
 
plt.show()

 3. step:柱狀形顏色不填充 

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,histtype='step')
 
plt.show()

 4. stepfilled:生成一個默認填充的線圖

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,histtype='stepfilled')
 
plt.show()

(2)range參數(指定直方圖數據的上下界,默認包含繪圖數據的最大值和最小值(范圍))

不想顯示數據全部范圍,隻想查看數據某一個范圍內的數據。(例:下圖數據范圍為140~180之間,隻想查看150~170之間的數據)

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,histtype='bar',range=(150,170))
 
plt.show()

(3)orientation參數 (設置直方圖的擺放位置,vertical垂直方向 horizontal水平方向,默認值:vertical垂直方向)

垂直方向(默認垂直,可以不寫):

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10)
 
plt.show()

 

horizontal水平方向:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,orientation='horizontal')
 
plt.show()

(4)density參數(bool值,True:將坐標軸轉化為密度刻度,默認值:None)

直方圖為垂直方向時,觀察y軸:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,density=True)
 
plt.show()

 直方圖為水平方向時,觀察x軸:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,orientation='horizontal',density=True)
 
plt.show()

(5)weights參數(為每個數據點設置權重)

  直方圖為垂直方向時,觀察y軸:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,weights=data)
 
plt.show()

  直方圖為水平方向時,觀察x軸:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,orientation='horizontal',weights=data)
 
plt.show()

(6)cumulative參數(bool值,是否需要計算累計頻數或頻率,默認值:False)

頻數:指事件發生的次數

頻率:指次數占總次數n的比例

頻率=頻數/n

  直方圖為垂直方向時:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,cumulative=True)
 
plt.show()

直方圖為水平方向時: 

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,orientation='horizontal',cumulative=True)
 
plt.show()

(7)bottom參數(為直方圖添加基準線)

直方圖為垂直方向時,觀察y軸:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,bottom=170)
 
plt.show()

 直方圖為水平方向時,觀察x軸:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,orientation='horizontal',bottom=170)
 
plt.show()

(8)align參數(設置條形邊界值的對其方式,mid、left、right,默認值:mid)

mid(默認值可以不寫):

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10)
 
plt.show()

 left:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,align='left')
 
plt.show()

 right:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,align='right')
 
plt.show()

(9)rwidth參數(設置直方圖條形寬度的百分比)

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,rwidth=0.5)
 
plt.show()

(10)log參數(bool值,對繪圖數據進行log變換 默認值:False)

直方圖為垂直方向時,觀察y軸:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,log=True)
 
plt.show()

 直方圖為水平方向時,觀察x軸:

import matplotlib.pyplot as plt
import numpy as np
 
data=np.random.randint(140,180,200)
 
plt.hist(data,bins=10,orientation='horizontal',log=True)
 
plt.show()

(11)stacked參數(bool值,當有多個數據時,是否需要將直方圖呈堆疊擺放,默認值:False水平擺放)

stacked=False時:(水平擺放)

import matplotlib.pyplot as plt
import numpy as np
 
x=np.random.randint(140,180,200)
y=np.random.randint(140,180,200)
 
plt.hist([x,y], bins=10)
 
plt.show()

 stacked=True時:(堆疊擺放)

import matplotlib.pyplot as plt
import numpy as np
 
x=np.random.randint(140,180,200)
y=np.random.randint(140,180,200)
 
plt.hist([x,y], bins=10,stacked=True)
 
plt.show()

(12)直方圖所有參數展示:

import matplotlib.pyplot as plt
import numpy as np
 
plt.rcParams['font.sans-serif']=['FangSong']
 
fig=plt.figure(figsize=(8,8))
data=np.random.randint(140,180,200)
 
# data數據
# bins設置長條形的個數
# histtype設置樣式 barstacked:在柱狀形數據重疊並排(相同的在一起)
# range顯示范圍
# cumulative累計頻數
# align設置邊界對齊值為中心對齊
# orientation設置擺放方向為horizontal水平方向
# rwidth設置長條形寬度的百分比為20
# color設置長條形的填充顏色為#FFB6C1
# label設置直方圖的標簽
# edgecolor設置長條形邊框線為#FFD700
# alpha設置長條形的透明度為0.5
# density=True 長條形呈水平方向:density將x軸轉換為密度刻度  長條形呈垂直方向:density將y軸轉換為密度刻度
# weights=data為每個數據點設置權重
# bottom設置基準線為15000
# log=True是否對數據進行log轉換
plt.hist(data,bins=10,histtype='barstacked',range=(140,170),cumulative=True,align='mid',orientation='horizontal',rwidth=20,color='#FFB6C1',
        label='數量',edgecolor='#FFD700',alpha=0.5,weights=data,bottom=10000,log=False)
 
plt.xticks(size=20) # x軸刻度值大小
plt.yticks(size=20) # y軸刻度值大小
 
plt.title('hist',size=30) # 設置直方圖標簽
plt.xlabel('x軸',size=15) # 設置x軸標簽
plt.ylabel('y軸',size=20) # 設置y軸標簽
 
plt.rcParams.update({'font.size':20})  # 修改圖例字體大小
 
plt.legend()
plt.show()

 三、在直方圖上畫折線圖

import matplotlib.pyplot as plt
import numpy as np
 
x=np.random.normal(100,15,10000)
y=np.random.normal(80,15,10000)
 
# density=True設置為密度刻度
n1, bins1, patches1 = plt.hist(x, bins=50,  density=True, color='#00B8B8', alpha=1)
n2, bins2, patches2 = plt.hist(y, bins=50,  density=True, color='r', alpha=0.2)
 
plt.plot(bins1[:-1],n1,':',lw=3)
plt.plot(bins2[:-1],n2,'--',lw=3)
 
plt.show()

總結

到此這篇關於Python matplotlib.pyplot.hist()繪制直方圖的文章就介紹到這瞭,更多相關matplotlib.pyplot.hist()繪制直方圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: