seaborn繪圖


導語:

既然有了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()

  1. M:plt.bar(x,y)
  2. P:data.plot(kind="bar")
  3. 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

 

  1. M:plt.hist(data,bins=)
  2. P:data.plot(kind="hist",bins=)
  3. 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)

 

  1. M:plt.boxplot(data)
  2. P:data.plot(kind="box",)
  3. 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還可以再次分類

 

 

~散點圖

 

  1. M:plt.scatter(x,y)
  2. P:data.plot(kind="scatter",x=,y=)
  3. 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也是分組,但能分別畫圖

 


免責聲明!

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



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