python數據可視化之Seaborn(七|終):FacetGrid與PairGrid操作

寫在開頭:今天分享的是關於FacetGrid與PairGrid繪製多結構繪圖的內容,同樣參考文獻放置在本章的最後,這也是本系列的最後一節希望自己繼續加油。

前文回顧
第一節分享了Seaborn繪圖的整體顏色與風格比例調控,可點擊鏈接查看。
python數據可視化之Seaborn(一)
第二節分享了連續、分類、離散數據的繪圖顏色的方法,可點擊鏈接查看。
python數據可視化之Seaborn(二)
第三節分享了對於數據分佈的繪圖方法,可點擊鏈接查看。
python數據可視化之Seaborn(三)
第四節分享了關於數據相關性的一些繪圖展示,可點擊鏈接查看。
python數據可視化之Seaborn(四)
第五節分享了關於分類數據的一些繪圖展示方法,可點擊鏈接查看。
python數據可視化之Seaborn(五)
第六節分享了關於迴歸如何進行繪圖的一些方法,可點擊鏈接查看。
python數據可視化之Seaborn(六)

Seaborn可視化內容安排

在Seaborn的學習中安排如下,
一、畫風設置:會簡單介紹一下繪圖風格(一)與顏色風格(二)的設置;
二、繪圖技巧:這裏會介紹數據集(三)、相關數據(四)、分類數據(五)、線性關係(六)可視化的相關內容;
三、結構網絡:本節主要介紹數據識別結構網絡的繪圖(七)。

三、Seaborn結構網絡

在我們通常畫圖的時候,希望能夠將圖進行多圖結合對比,這樣能夠將數據的信息最大程度的展現出來,特別對於多維數據的時候這樣構建一個結構網絡進行繪圖就顯得尤爲重要,下面我們首先加載今天需要的包,

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style("whitegrid")

快速分格繪圖
在我們希望繪製一個多類別數據可視化的時候,FacetGrid十分有用,他能夠通過row、col、hue三個參數快速實現圖像的分隔,在這裏我們的繪圖代碼思路是,先用sns.FacetGrid進行參數的調整,然後使用map的功能,直接繪製圖像,

tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", size=6)
g.map(plt.hist, "tip");

在這裏插入圖片描述
當然可以通過添加hue可以使得不同類別進行展示,

g = sns.FacetGrid(tips, col="sex", hue="smoker", palette="Set2", size=4)
g.map(plt.scatter, "total_bill", "tip", alpha=.4)
g.add_legend()

在這裏插入圖片描述
還可以有一些參數可以調節繪圖,

g = sns.FacetGrid(tips, row="smoker", col="time", margin_titles=True)
g.map(sns.regplot, "size", "total_bill", color="g", fit_reg=True, x_jitter=.5)

在這裏插入圖片描述
對於margin_title這個參數並不能和matplotilb很好的對接,尤其是在外繪製類別標籤的時候。控制畫布大小的主要是height和aspect參數,

g = sns.FacetGrid(tips, col="day", height=4, aspect=.7)
g.map(sns.barplot, "sex", "total_bill")

在這裏插入圖片描述
我們在繪製網絡格子圖的時候還可以設置order參數來調整位置,

order = tips.day.value_counts().index
g = sns.FacetGrid(tips, row="day", row_order=order,
                 height=1.7, aspect=4, size=4)
g.map(sns.distplot, "total_bill", hist=False, rug=True)

在這裏插入圖片描述
當然還可以通過設置字典來對palette調色板來調整顏色,不光能夠調節顏色還能夠調節標記點形狀,利用FacetGrid這種方法繪圖的話不能夠在map後使用基於FacetGrid的繪圖方法,比如lmplot、relplot、catplot等

pal = dict(Lunch="red", Dinner="gray")
g = sns.FacetGrid(tips, hue="time", palette=pal, height=5, hue_kws={"marker":["^", "v"]})
g.map(plt.scatter, "total_bill", "tip", s=100, alpha=.7, linewidth=.5, edgecolor="white")
g.add_legend()

在這裏插入圖片描述
然後還可以用col_wrap參數以及ylim參數來調整繪圖佈局已經縱座標的取值範圍,

attend = sns.load_dataset("attention").query("subject <= 9")
g = sns.FacetGrid(attend, col="subject", col_wrap=3, height=2, ylim=(0, 10))
g.map(sns.pointplot, "solutions", "score", order=[1, 2, 3], color="g", ci=None)

在這裏插入圖片描述
當我們開始使用FacetGrid進行繪圖的時候,我們會想要去對繪圖進行許多調整,這個時候我們可以使用FacetGrid.set()的一些方法,來對細節進行調整,在此之前我們是否發現圖像很大,但周圍的標題等字都很小,爲了解決這個問題我們可以設置sns.set(font_scale=2)來調節大小,

sns.set(font_scale=2)#調節文中字體的大小
with sns.axes_style("white"):
    g = sns.FacetGrid(tips, row="sex", col="smoker", margin_titles=True, height=2.5,size=5)
g.map(plt.scatter, "total_bill", "tip", color="#ffcfdc", edgecolor="white", lw=.5, s=50)
g.set_axis_labels("Toal bill", "Tip")
g.set(xticks=[10, 30, 50], yticks=[2, 6, 10])
g.fig.subplots_adjust(wspace=.02, hspace=.02)#四個圖之間的間隔調整

在這裏插入圖片描述
在私人訂製化的圖像中我們可以直接在matplotlib的Figure和Axes中進行設置,會被fig和axes保存爲二元數組,另外可以直接使用ax對軸進行控制,

sns.set(font_scale=2)
g = sns.FacetGrid(tips, col="smoker", margin_titles=True, height=4, size=10)
g.map(plt.scatter, "total_bill", "tip", color="#fac205", edgecolor="white", s=200, lw=1)
for ax in g.axes.flat:#這裏的g.axes.flat意思大概就是對於該圖像吧,這裏沒太搜到
    ax.plot((0, 50), (0, 10), c=".2", ls="--") #添加斜線
g.set(xlim=(0,50), ylim=(0, 10))

在這裏插入圖片描述
使用自定義函數
當然我們有時候使用不滿足於FacetGrid,我們可以來自定義一些繪圖的函數來更友好的繪圖,但是在繪圖之前我們需要遵守一些小規則,1.要能夠調用matplotlib函數的繪圖;2.要能夠接受數據;3.要能夠接受顏色以及標籤;

sns.set()
def hist_plot(x, **kwargs):
    sns.distplot(x, **kwargs)
    
g = sns.FacetGrid(tips, col="sex", height=4, size=5)
g.map(hist_plot, "total_bill")

在這裏插入圖片描述
我們再來繪製一個QQ圖,也就是用來繪製數據正態性的圖,並調整其中的部分參數,

from scipy import stats
def qqplot(x, y, **kwargs):
    _, xr = stats.probplot(x, fit=False)
    _, yr = stats.probplot(y, fit=False)
    plt.scatter(xr, yr, **kwargs)

g = sns.FacetGrid(tips, hue="time", col="sex", height=4,
                  hue_kws={"marker": ["s", "D"]})
g.map(qqplot, "total_bill", "tip", s=40, edgecolor="w")
g.add_legend();

在這裏插入圖片描述
當然還可以繪製hexbin圖,

def hexbin(x, y, color, **kwargs):
    cmap = sns.light_palette(color, as_cmap=True)
    plt.hexbin(x, y, gridsize=15, cmap=cmap, **kwargs)

with sns.axes_style("dark"):
    g = sns.FacetGrid(tips, hue="time", col="time", height=4)
g.map(hexbin, "total_bill", "tip",extent=[0, 50, 0, 10])

在這裏插入圖片描述

繪製成對相關圖
在此之前的相關數據中我們介紹了部分相關的繪圖方法,比如PairGrid(),下面我們分享一下,PairGrid()如何調整參數繪製圖像,可以設置對象線上畫什麼還有其他地方畫什麼,甚至還可以對矩陣圖的上三角矩陣繪製一種類型、下三角矩陣繪製一種類型,

iris = sns.load_dataset("iris")
g = sns.PairGrid(iris, hue="species", palette="Set2")
g.map_diag(plt.hist)
g.map_lower(plt.scatter)
g.map_upper(sns.kdeplot)
g.add_legend()

在這裏插入圖片描述
還可以通過控制vars來選取繪圖使用的變量,

g = sns.PairGrid(iris, vars=["sepal_length", "sepal_width"], hue="species", palette="Set2")
g.map(plt.scatter)

在這裏插入圖片描述
還可以控制x爲多變量,y爲單變量來進行不同變量的繪圖操作,

g = sns.PairGrid(tips, y_vars=["total_bill"], x_vars=["tip", "size"], height=4)
g.map(sns.regplot, color="#d6b4fc")
g.set(ylim=(-1, 100), yticks=[0, 100, 10]);

在這裏插入圖片描述
當然pairplot的繪圖可以不再PairGrid的提前設置下進行,也可以使用sns.pairplot()函數進行繪製,

sns.set_style("whitegrid")
g = sns.pairplot(iris, hue="species", palette="Set1", diag_kind="kde", height=3)

在這裏插入圖片描述
結語
到此對於Seaborn的繪圖的介紹就到此結束,我們對seaborn從顏色、風格到各種繪圖、到最後的FacetGrid和PairGrid參數調整進行了全面的瞭解,當然要熟練使用這些東西還需要在日後的聯繫中反覆回憶才能爲自己所用。
謝謝閱讀。
參考
Seaborn繪圖文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章