畫頻次直方圖需要先用numpy生成服從正態分佈的數據,然後用matplotlib畫圖。其中seaborn也是python的一個數據可視化的庫。用seaborn畫圖比matplotlib更方便和好看點,其底層也是matplotlib.
import numpy as np
from numpy.linalg import cholesky
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
1.繪製一維正態分佈直方圖
data=np.random.normal(0,1,1000)#生成一組期望值=0,標準差=1的標準正太分佈數組,數組中有1000個元素
plt.hist(data,bins=10,alpha=0.5)
data2=np.random.normal(0,1,1000)#生成第二組數據
plt.hist(data2,bins=10,alpha=0.5)
還可以用np.random.randn生成正態分佈數據,sigma是標準差,mu是期望值
data= sigma* np.random.randn(1000) + mu
2.用KDE獲取變量分佈的平滑估計。
sns.kdeplot(data,shade=True)
sns.kdeplot(data2,shade=True)
3.頻次直方圖和KDE的結合
sns.distplot(data)
sns.distplot(data2)
4.繪製二維KDE圖
當輸入的數據是二維時,sns.kdeplot就可繪製一個二維的數據可視化圖。
data0=pd.DataFrame(np.array([data,data2]).T,columns=['x','y'])#將data,data2封裝成DataFrame的x,y列,方便後面進行聯合分佈。
sns.kdeplot(data0)
繪製兩個變量的聯合分佈與單變量的獨立分佈。
with sns.axes_style('white'):#使用白色背景
sns.jointplot('x','y',data0,kind='kde')
修改jointplot的參數,用六邊形塊代替頻次直方圖
同時繪製了相對應的散點圖