Seaborn第三方繪圖(二)

FacetGrid與調色盤

FacetGrid結構圖

之前我們在繪圖的時候,學了relplotcatplotlmplot等,這些函數可以通過colrow等在一個Figure中繪製多個圖。這些函數之所以有這些功能,是因爲他們的底層使用了FacetGrid

Axes繪圖

實際上seaborn的繪圖函數中也有大量的直接使用Axes進行繪圖,凡是函數名中已經明確顯示這個圖的類型,這張圖都是使用Axes繪圖的。比如sns.scatterplotsns.linplotsns.borplot等。Axes繪圖可以直接使用之前matplotlib的一些方式設置圖的元素。

# subplts爲繪製子圖,創建一個1*2的矩陣圖,figsize爲畫布大小
# 軸對象以將繪圖繪製到該軸上,否則使用當前軸
# 
fig,ax = plt.subplots(1,2,figsize=(20,5))
sns.scatterplot(x='total_bill',y='tip',data=tips,ax=ax[0])
sns.barplot(x='day',y='total_bill',data=tips,ax=ax[1])
plt.show()

在這裏插入圖片描述

注意

  • FacetGrid可以通過col 和 row 等參數來一次性構建多個圖形
  • relplot/catplot/lmplot等函數都是用的FacetGrid方法技術
  • 凡是函數名中已經明確了圖的類型,都是直接使用Axes進行繪圖
  • FacetGrid繪圖的x和y參數,必須爲DataFrame的列的名字,而直接使用Axes繪圖,參數更加靈活
  • 直接使用Axes繪圖,可以非常方便的跟Matplotlib結合使用

FacetGrid使用

seaborn.FacetGrid(data,row=None,col=None,hue=None)

  1. 初始化matplotlib畫布和FacetGrid對象
  2. data : 爲DataFrame數據
  3. row,col,hue : 定義數據子集的變量,這些變量將在網格的不同方面繪製

注意

  • 先創建一個FacetGrid對象
  • 再調用這個對象的map方法
  • map的第一個參數是函數
  • 後續map通過調用該函數繪製圖形
  • 後面的參數是傳給函數的參數

Axes 與 FacetGrid繪圖

參數 描述 FacetGrid函數
plt.plotsns.lineplot 繪製折線圖 sns.relplot(kind='line')
plt.hexbin 繪製六邊形圖 sns.jointplot(kind='hex')
plt.scatterplot 繪製散點圖 sns.relplot(kind='scatter')
plt.hist 繪製直方圖 sns.distplot
sns.scatterplot 繪製分類散點圖 sns.catplot(kind='scatter')
sns.swarmplot 散開來的分散點圖 sns.catplt(kind='swarm')
sns.violinplot 繪製小提琴圖 sns.catplot(kind='violine')
sns.pointplot 繪製點線圖 sns.catplot(kind='point')
sns.barplot 繪製條形圖 sns.catplot(kind='barplot')
sns.countplot 繪製數量柱狀圖 sns.catplot(kind='count')

設置圖形的尺寸

使用FacetGrid繪製圖形後,有時候我們想設置每個圖形的尺寸或者是寬高比,那麼我們通過FacetGrid中設置heightaspect來實現,其中height表示每個圖形的尺寸,aspect表示寬高比例

# 傳入的參數data
# height 爲高度
# aspect 爲寬度
g = sns.FacetGrid(tips,col = 'smoker',height=5,aspect=1)
g.map(sns.barplot,'day', 'total_bill')

在這裏插入圖片描述

添加圖例

add_lengend()

# 設置顯示中文
sns.set(rc={"font.sans-serif":"SimHei"})

# 初始化FacetGrid
fg = sns.FacetGrid(tips,col='day',hue='time')

# map進行繪圖
fg.map(sns.regplot,'total_bill','tip')


# 添加圖例
fg.add_legend(title='標題',label_order=['Dinner','Lunch'])

new_labels = ["晚餐","午餐"]
for text,lable in zip(fg._legend.texts,new_labels):
    text.set_text(lable)

在這裏插入圖片描述

設置標題

set_titles()

設置標題可以通過g.set_titles(templates=None,row_templates=None,col_templates=None)來實現,三個參數分別代表的意義如下:

  • template:給圖設置標題,其中有{row_var}繪製每行圖像的名稱,{row_name}繪製每行圖像的值,{col_var}繪製每列圖像的值,{col_name}繪製每列圖像的值。
  • col_template: 每圖像設置列的標題。其中有{col_var}以及{col_name}可以使用。
  • row_template: 給圖像設置行的標題。其中有{row_var}以及{row_name}可以使用。
# 設置中文
sns.set(rc={'font.sans-serif':'SimHei'})

# 初始化FacetGrid
g = sns.FacetGrid(tips,col='day',row='time')

# 設置標題
# 這裏的col_name 爲指定的col的值

g.map(sns.scatterplot,'total_bill','tip')

# template
g.set_titles(template = '時間{row_name}-星期:{col_name}')

在這裏插入圖片描述

設置座標軸

set_axis_lables()

# 設置中文
sns.set(rc={'font.sans-serif':'SimHei'})

# 初始化FacetGrid
g = sns.FacetGrid(tips,col='day',row='time')

# 設置標題
# 這裏的col_name 爲指定的col的值

g.map(sns.scatterplot,'total_bill','tip')

# template
g.set_titles(template = '時間{row_name}-星期:{col_name}')

# 設置座標軸
g.set_axis_labels("消費金額","消費")

設置背景顏色

set(facecolor=)

# 設置中文
sns.set(rc={'font.sans-serif':'SimHei'})

# 初始化FacetGrid
g = sns.FacetGrid(tips,col='day',row='time')

# 設置標題
# 這裏的col_name 爲指定的col的值

g.map(sns.scatterplot,'total_bill','tip')

# template
g.set_titles(template = '時間{row_name}-星期:{col_name}')

# 設置座標軸
g.set_axis_labels("消費金額","消費")

# 設置背景顏色
g.set(facecolor="g")

在這裏插入圖片描述

Seaborn樣式風格設置

seaborn繪圖,比直接使用matplotlib繪圖更加的美觀。原因是在seaborn中已經將一些屬性的樣式進行了調整。我們可以直接使用。也可以修改他的樣式。

風格設置函數

seaborn中,可以通過三個函數來設置樣式。分別是sns.set_stylesns.axes_style以及sns.set方法。

sns.axes_style

  • 如果沒有傳任何參數 ,返回的是字段屬性
  • 臨時的樣式
# 設置大小
plt.figure(figsize=(15,8))

# 臨時設置
with sns.axes_style('darkgrid',rc={'axes.facecolor':'black'}):
    sns.lineplot(x='timepoint',y='signal',data=fmri)
    plt.show()

在這裏插入圖片描述

sns.set

set方法也是用來設置樣式的,他的功能更加強大。除了style以外,還可以設置調色板,字體,大小,字體大小,顏色,也可以設置其他的matplotlib.rcParams可以接收的參數。

sns.set(rc={'font.sans-serif':'SimHei','lines.linewidth':5})
sns.lineplot(x='timepoint',y='signal',data=fmri)

在這裏插入圖片描述

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