文章目錄
FacetGrid與調色盤
FacetGrid結構圖
之前我們在繪圖的時候,學了relplot
、catplot
、lmplot
等,這些函數可以通過col
、row
等在一個Figure
中繪製多個圖。這些函數之所以有這些功能,是因爲他們的底層使用了FacetGrid
Axes繪圖
實際上seaborn
的繪圖函數中也有大量的直接使用Axes
進行繪圖,凡是函數名中已經明確顯示這個圖的類型,這張圖都是使用Axes
繪圖的。比如sns.scatterplot
、sns.linplot
、sns.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)
- 初始化
matplotlib
畫布和FacetGrid
對象 - data : 爲DataFrame數據
- row,col,hue : 定義數據子集的變量,這些變量將在網格的不同方面繪製
注意
- 先創建一個
FacetGrid
對象 - 再調用這個對象的
map
方法 map
的第一個參數是函數- 後續
map
通過調用該函數繪製圖形 - 後面的參數是傳給函數的參數
Axes 與 FacetGrid繪圖
參數 | 描述 | FacetGrid函數 |
---|---|---|
plt.plot 、sns.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
中設置height
和aspect
來實現,其中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_style
、sns.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)