導語:
既然有了matplotlib,那為啥還需要seaborn呢?其實seaborn是在matplotlib基礎上進行封裝,Seaborn就是讓困難的東西更加簡單。用Matplotlib最大的困難是其默認的各種參數,而Seaborn則完全避免了這一問題。seaborn是針對統計繪圖的,一般來說,seaborn能滿足數據分析90%的繪圖需求,復雜的自定義圖形,還是要Matplotlib。
導入數據
1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 %matplotlib inline 4 plt.rcParams['font.sans-serif'] = ['SimHei']#顯示中文 5 plt.rcParams['axes.unicode_minus'] = False#顯示負號 6 import pandas as pd 7 import numpy as np 8 from pandas import Series,DataFrame 9 test=pd.read_excel("/Users/yaozhilin/Downloads/exercise.xlsx",sep="t") 10 test.head(5)#顯示前五行
為了描述簡便下面matplotlib-M,pandas-P和seaborn-S
~條形圖:sns.barplot()
- M:plt.bar(x,y)
- P:data.plot(kind="bar")
- S:sns.baplot(x=,y=,data=,hue=)
1 ig,axes = plt.subplots(2,2,figsize=(8,8)) 2 sns.barplot(x="所屬區域",y="數量",data=test,ax=axes[0,0]) 3 sns.barplot(x="所屬區域",y="數量",data=test,ax=axes[0,1],ci=0)#ci=0去掉置信線 4 sns.barplot(x="所屬區域",y="數量",data=test,ax=axes[1,0],hue="產品類別",ci=0)#用hue進行分組,非常實用
注:M與S語法一致但S傳參數hue就可以分組,非常簡便,而P默認index=x、values=y.
~直方圖:distplot
- M:plt.hist(data,bins=)
- P:data.plot(kind="hist",bins=)
- S:sns.distplot(data,bins=,hist=,kde=,rug=)
Seaborn有一個強大的方法:distplot,它支持一些參數:
- bins:直方圖的分塊
- hist:True表示繪制直方圖,默認為True
- kde:True表示繪制密度圖,默認為True
- rug:顯示分布情況,默認為False不顯示
1 test.dropna(how='any',inplace=True)#去除缺失值 2 fig,axes = plt.subplots(2,2,figsize=(9,9)) 3 sns.distplot(test["數量"],ax=axes[0,0],color="green") 4 sns.distplot(test["數量"],ax=axes[0,1],color="black",kde=False)#只畫直方圖 5 sns.distplot(test["數量"],ax=axes[1,0],color="blue",hist=False)#只kde圖 6 sns.distplot(test["數量"],ax=axes[1,1],color="green",rug=True)#加抖動rug
~箱型圖sns.boxplot(x,y,data)
- M:plt.boxplot(data)
- P:data.plot(kind="box",)
- S:sns.boxplot(x=,y=,data,hue=)
M對一列數作箱型圖,P中data若是多列則每列都是一個箱型圖,S則是將x分為y組出多個箱型圖也能加參數hue再次分組。
單個箱型圖
1 sns.boxplot(y='數量',data=test,color="green")#傳一個變量,即不分類,若傳只傳x為水平圖
多個箱型圖:傳入x,x有幾類就有幾個圖
1 sns.boxplot(x='所屬區域',y='數量',data=test)#按“所屬區域”畫“數量”的箱型圖
1 sns.boxplot(x='所屬區域',y='數量',data=test,hue="產品類別")#hue還可以再次分類
~散點圖
- M:plt.scatter(x,y)
- P:data.plot(kind="scatter",x=,y=)
- S:sns.scatterplot(x=,y=,data,hue=)
只有S中X可以為分類變量,做出類似箱型圖的點圖,而且可以傳殘hue進行分類。
1 sns.scatterplot(x="所屬區域",y="數量",data=test)
1 sns.scatterplot(x="所屬區域",y="數量",data=test,hue="產品類別")#hue分類
sns.swarmplot()和sns.stripplot()更為美觀
1 sns.swarmplot(x="所屬區域",y="數量",data=test,hue="產品類別")#hue分類
1 sns.stripplot(x="所屬區域",y="數量",data=test,hue="產品類別",split=True)#split將點打散
變量關系圖
sns.jointplot(x=,y=,data=,kind=)
kind的類型"scatter" 、"reg" 、"resid" 、"kde" 、 "hex"
下面我們看看test中成本和金額的關系圖
1 sns.jointplot(x="成本",y="金額",data=test)
默認kind=scatter,看看kind=kde
1 sns.jointplot(x="成本",y="金額",data=test,kind="kde")#kind="kde"密度曲線圖
kind=reg為回歸圖,看看成本和售價回歸圖是否可以很好的擬合
1 sns.jointplot(x="成本",y="金額",data=test,kind="reg")#kind="reg"回歸圖
~sns.pairplot(data)
所有變量倆倆畫圖
1 sns.pairplot(test)
diag_kind調整圖形樣式
1 sns.pairplot(test,diag_kind="kde")
vas=[]控制要畫圖的數據
1 sns.pairplot(test,diag_kind="kde",vars=["數量","金額"])
hue進行分組
sns.pairplot(test,diag_kind="kde",vars=["數量","金額"],hue="所屬區域")#hue進行分類
~sns.lmplot()
參數:x=,y=,data=,order:次數,robust:魯棒性,ci:置信度,hue:分組,col:分組並且圖像拆分
探究test中金額與數量的回歸圖:
1 sns.lmplot(x="金額",y="數量",data=test)#默認線型回歸
robust:忽略異常點
1 sns.lmplot(x="金額",y="數量",data=test,robust=True)#robust=True忽略異常點,讓圖形具有魯棒性
hue分組
col相當於分開畫圖的hue
1 sns.lmplot(x="金額",y="數量",data=test,col="產品類別")#col也是分組,但能分別畫圖