Python利用 matplotlib 繪制直方圖
復習回顧:
經(jīng)過前面對 matplotlib 模塊從底層架構、基本繪制步驟等學習,我們已經(jīng)學習了折線圖、柱狀圖的繪制方法。
matplotlib 模塊基礎:對matplotlib 模塊常用方法進行學習
matplotlib 模塊底層原理:學習matplotlib 模塊腳本層、美工層及后端層
matplotlib 繪制折線圖:總結折線圖相關屬性和方法
matplotlib 繪制柱狀圖:總結柱狀圖相關屬性和方法
在分析數(shù)據(jù)的時候,我們會根據(jù)數(shù)據(jù)的特點來選擇對應圖表來展示,需要表示質量這一概念,需要用直方圖。

1. 直方圖概述
1.1什么是直方圖?
- 直方圖是一種可視化表示數(shù)據(jù)在連續(xù)間隔或者特定時間段內(nèi)容的分布情況
- 直方圖又稱為質量分布圖,屬于條行圖的一種
- 直方圖x軸表示數(shù)據(jù)類型,縱軸表示分布情況,每個數(shù)據(jù)寬度可以任意變化
1.2直方圖使用場景
- 直方圖用于概率分布,展示一組數(shù)據(jù)在指定范圍內(nèi)的出現(xiàn)概率
- 可以用于展示數(shù)據(jù)分布頻率情況
- 用于眾數(shù)、中位數(shù)的位置
- 關注數(shù)據(jù)存在缺口或者異常值
1.3直方圖繪制步驟
- 導入matplotlib.pyplot模塊
- 準備數(shù)據(jù),可以使用numpy/pandas整理數(shù)據(jù)
- 調(diào)用pyplot.hist()繪制直方圖
1.4案例展示
本次案例我們來分析公司員工的身高分布情況
案例數(shù)據(jù)準備,使用numpy隨機生成200個升高數(shù)據(jù)
import numpy as np x_value = np.random.randint(140,180,200)
繪制直方圖:
import matplotlib.pyplot as plt
plt.hist(x_value,bins=10)
plt.title("data analyze")
plt.xlabel("height")
plt.ylabel("rate")
plt.show()

2. 直方圖屬性
2.1設置顏色
- 設置長條形顏色關鍵字:facecolor
- 設置邊框的顏色關鍵字:edgecolor
顏色選擇值:
- 使用顏色的英語單詞如紅色"red",黃色"yellow"
- 使用顏色簡稱:紅色"r",藍色"b"
- 使用rgb:格式(r,g,b),取值范圍:0~1
2.2設置長條形數(shù)目
- 關鍵字:bins
- 可選項,默認為10
2.3設置透明度
- 關鍵字:alpha
- 默認為0,取值范圍為0~1
2.4設置樣式
- 關鍵字:histtype
- 取值說
| 屬性值 | 說明 |
|---|---|
| 'bar' | 柱狀形數(shù)據(jù)并排,默認值 |
| 'barstacked' | 柱狀形數(shù)據(jù)重疊并排 |
| 'step' | 柱狀形顏色不填充 |
| 'stepfilled' | 填充的線性 |
我們對第一節(jié)直方圖添加柱狀形不填充,邊框顏色為紅色
plt.hist(x_value,bins=10,edgecolor="r",histtype="step")

邊框設置為紅色,透明度為0.5
plt.hist(x_value,bins=10,edgecolor="r",histtype="bar",alpha=0.5)

3. 添加折線直方圖
在直方圖中,我們也可以加一個折線圖,輔助我們查看數(shù)據(jù)變化情況
- 首先通過pyplot.subplot()創(chuàng)建Axes對象
- 通過Axes對象調(diào)用hist()方法繪制直方圖,返回折線圖所需要的下x,y數(shù)據(jù)
- 然后Axes對象調(diào)用plot()繪制折線圖
- 我們對第一節(jié)代碼進行改造一下
fig,ax = plt.subplots() n,bins_num,pat = ax.hist(x_value,bins=10,alpha=0.75) ax.plot(bins_num[:10],n,marker = 'o',color="yellowgreen",linestyle="--")

4. 堆疊直方圖
我們有時候會對吧同樣數(shù)據(jù)范圍情況下,對比兩組不同對象群體收集的數(shù)據(jù)差異
準備兩組數(shù)據(jù):
import numpy as np x_value = np.random.randint(140,180,200) x2_value = np.random.randint(140,180,200)
- 直方圖屬性data:以列表的形式傳入兩組數(shù)據(jù)
- 設置直方圖stacked:為True,允許數(shù)據(jù)覆蓋
plt.hist([x_value,x2_value],bins=10,stacked=True)

5. 不等距直方圖
我們上述繪制的直方圖都是等距的,我們可以指定一組數(shù)據(jù)傳入bins屬性
- bins 關鍵字:指定直方圖的柱狀形個數(shù)
- 更改上述的代碼后,看看效果吧
bin_num = [140,155,160,170,175,180] plt.hist([x_value,x2_value],bins=bin_num,alpha=0.75,stacked=True)

6. 多類直方圖
我們在使用直方圖查查看數(shù)據(jù)的頻率時,有時候會查看多種類型數(shù)據(jù)出現(xiàn)的頻率。
這時候我們可以以列表的形式傳入多種數(shù)據(jù)給hist()方法的x數(shù)據(jù)
x_value = [np.random.randint(140,180,i) for i in [100,200,300]] plt.hist(x_value,bins=10,edgecolor="r",histtype="bar",alpha=0.5,label=["A公司","B公司","C公司"])

總結:
我們對matplotlib模塊中詳細學習繪制各種直方圖標相關屬性和方法。在需要查看數(shù)據(jù)分布頻率時,我們可以使用hist()方法繪制直方圖,同時也可以添加折線來輔助查看
到此這篇關于Python利用 matplotlib 繪制直方圖的文章就介紹到這了,更多相關Python matplotlib 模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python如何實現(xiàn) HTTP echo 服務器
本文介紹了如何使用Python實現(xiàn)一個簡單的HTTPecho服務器,該服務器支持GET和POST請求,并返回JSON格式的響應,GET請求返回請求路徑、方法、頭和查詢字符串,POST請求還返回請求體內(nèi)容,服務器的使用方法和測試示例也一并提供,感興趣的朋友跟隨小編一起看看吧2025-01-01
Python使用email模塊對郵件進行編碼和解碼的實例教程
Python中我們一般使用SMTP模塊來首發(fā)郵件,而用email模塊來處理郵件編碼,本文我們就來詳細看一下Python使用email模塊對郵件進行編碼和解碼的實例教程,需要的朋友可以參考下2016-07-07

