在《Python可視化Seaborn庫詳解——繪圖設置 》一文中,我們介紹了Seaborn庫的繪圖參數設置,本文我們将介紹具體的繪圖方法。
其實雖然Seaborn庫看着繪圖函數多,但有幾個函數的泛化性非常強,通過參數的設置是可以繪出多種圖形的。為了便于掌握這些函數,本文會對這些方法進行歸納整理,力争做到提綱挈領的目的。
繪圖方法分類結合圖形的性質,将常規的可視化圖形分為了三類。
其中,線性關系所涉及到的是折線圖和散點圖,這兩類圖形在日常運用中非常常見;分類關系主要是描述不同維度下數據的統計結果,如條形圖、箱圖等;組合關系就類似于高級程序語言,它是由不同的基礎圖形組合而來的。
下面我們将一一介紹這些繪圖方法。
線性關系可視化我們用泰坦尼克号數據作為案例,首先進行數據準備。
importseabornassns
importpandasaspd
importnumpyasnp
data_raw=pd.read_csv("數據源/Titanic/train.csv")
df=data_raw.copy()
df.columns=[x.lower()forxindf.columns]
sns.relplot(x="passengerid",y="age",col="pclass",hue=None,
row=None,kind='scatter',data=df)
#kind為line,scatter;col表示按照該列進行分列繪圖
#下面是具體的折線圖和散點圖函數,但這兩種方法均不能進行分面
sns.lineplot(x="passengerid",y="age",data=df)
sns.scatterplot(x="passengerid",y="age",data=df)
分類關系有兩個一般性繪圖方法:catplot和distplot。
該函數可以繪制八種分類圖,并可以進行分面。每種分類圖也有相應的函數,可以進行更細緻的參數設置,但均不能進行分面。
sns.catplot(x="survived",y="age",hue=None,row=None,col=None,
data=df,kind=j,ax=axes[i])
#hue對X軸進行二次分組,row按行分面,row按列分面,kind控制圖形種類,
#有strip,swarm,box,violin,boxen,point,bar,count,strip為默認值
fig,axes=plt.subplots(3,3,figsize=(30,24))
ax=axes.flatten()
sns.stripplot(x="survived",y="age",data=df,ax=ax[0]) #條形散點圖
sns.swarmplot(x="survived",y="age",data=df,ax=ax[1]) #避免散點重疊的條形散點圖
sns.boxplot(x="survived",y="age",data=df,ax=ax[2]) #箱線圖
sns.countplot(x="survived",data=df,ax=ax[3]) #統計圖
sns.barplot(x="survived",y="age",data=df,ax=ax[4]) #條形圖
sns.violinplot(x="survived",y="age",data=df,ax=ax[5]) #小提琴圖
sns.boxenplot(x="survived",y="age",data=df,ax=ax[6]) #增強箱圖
sns.pointplot(x="survived",y="age",data=df,ax=ax[7]) #點圖
上圖為八種不同的分類圖。
直方圖是較為特殊的分類關系圖,雖然它屬于分布函數,但也可視為一種分類。該函數通過hist和kde參數可控制繪制的圖是直方圖還是密度圖,或是二者的結合。
fig,axes=plt.subplots(1,2,figsize=(12,5))
sns.distplot(df["age"],bins=[0,20,40,60,80,100],hist=True,kde=False,ax=axes[0])
sns.distplot(df["age"],bins=[0,20,40,60,80,100],hist=False,kde=True,ax=axes[1])
sns.kdeplot(df["age"],shade=True,vertical=False)
#核密度曲線
組合關系包含的都是一些較為複雜的圖,本文介紹三種。
該函數主要描述數據變量兩兩之間的關系圖,默認都是散點圖。
sns.heatmap(data=df[["age","sex","pclass","fare"]].corr(),linecolor="white",annot=True,linewidths=0.1,cmap='YlGnBu')
#cmap即colormap plt的顔色對象,annot系數值是否顯示,
#矩陣數據集,行為矩陣的列名稱,列為矩陣的行索引,如果是dataframe,則行為行索引
熱力圖是一款非常熱門的圖形,通過顔色來反映數據之間的關系。
sns.heatmap(data=df[["age","sex","pclass","fare"]].corr(),linecolor="white",
annot=True,linewidths=0.1)
#annot系數值是否顯示
#data最後是矩陣數據集,圖形的行為矩陣的列,列為矩陣的行索引,如果是dataframe,則行為行索引
這是兩個分面函數,分面的意思就是在一張畫布中畫多個圖形。
sns.factorplot(x="survived", y="age",row="sex",col="pclass",
data=df, kind="strip")
#多面闆繪圖
g=sns.FacetGrid(data=df,row="sex",col="pclass") #先畫出輪廓
g.map(sns.stripplot,"survived","age") #進行補充
其實這些分面圖形通過catplot方面也是可以實現的。
sns.catplot(x="survived",y="age",col="pclass",hue=None,
row="sex",kind='strip',data=df)
将這些方法進行歸類後就會發現,熟記并掌握這些函數變得容易多了。其實,可視化的原理并不複雜,複雜的隻是繪圖細節部分。因為每種組成部分都有衆多的參數,參數還有不同的取值。
當然了,常規的可視化需求我們采用默認設置就足夠了!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!