title: 学习 seaborn [01]: 散点图 & 线型图 slug: seaborn-scatter-line date: 2020-11-30 tags:

  • seaborn
  • python category: 数据分析 link: description: type: text

可视化统计关系

表示统计关系的图分为散点图和线型图两类。统一的FacetGrid图级接口函数为relplot()。

散点图

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import seaborn as sns
import pandas as pd
%matplotlib inline


# seaborn预设主题:darkgrid(默认),whitegrid,dark,white 以及 ticks
sns.set()
# 导入数据集。由于sns.load_dataset连接不上服务器,使用pandas导入本地下载的数据集
tips = pd.read_csv('seaborn-data-master/tips.csv')
display(tips)
total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4
........................
23929.035.92MaleNoSatDinner3
24027.182.00FemaleYesSatDinner2
24122.672.00MaleYesSatDinner2
24217.821.75MaleNoSatDinner2
24318.783.00FemaleNoThurDinner2

244 rows × 7 columns

绘制x、y二维关系

x、y必须是数值型

绘制散点图方法有两种:

  • relplot(),为scatterplot()和lineplot()的统一接口,默认绘制散点图,为FacetGrid图像级别接口,可绘制多个子图;
  • scatterplot(),为ax基础轴级函数,无法绘制子图,使用hue, size, style 这三个参数来控制绘图属性,用法类似relplot();
1
2
# 绘制散点图,x,y必须是数值型
g = sns.relplot(x='total_bill', y='tip', data=tips)

用不同元素颜色表示第三维变量

第三维数据必须是离散、有限的

1
g = sns.relplot(x='total_bill', y='tip', hue='sex', data=tips)

用不同元素尺寸表示第三维变量

1
g = sns.relplot(x='total_bill', y='tip', size='sex', data=tips)

用不同元素样式表示第三维变量

1
g = sns.relplot(x='total_bill', y='tip', style='sex', data=tips)

同时使用元素的颜色和样式表示第三维、第四维变量

一般从元素的颜色、尺寸、样式三这种选其二同时使用,三者同时使用时图像在视觉上比较混乱。

1
g = sns.relplot(x='total_bill', y='tip', hue='day', style='sex', data=tips)

使用列表示第三维变量

col_wrap参数控制每列的图像数量。

col_order参数控制图像顺序。

1
2
3
g = sns.relplot(x='total_bill', y='tip', col='day',
                col_wrap=2, col_order=['Thur', 'Sat', 'Fri', 'Sun'],
                data=tips)

使用行、列表示第三、第四维变量

1
g = sns.relplot(x='total_bill', y='tip', col='smoker', row='sex', data=tips)

增加第三、四、五、六维变量

除x、y以外,元素颜色、样式、尺寸三选其二,加上行、列,可以表示第三、四、五、六维变量。

1
2
g = sns.relplot(x='total_bill', y='tip', hue='day',
                style='time', col='smoker', row='sex', data=tips)

线型图

x、y必须是数值型

绘制散点图方法有两种:

  • relplot(kind=‘line’),为FacetGrid图像级别接口,可绘制多个子图;
  • lineplot(),为ax基础轴级函数,无法绘制子图,使用hue, size, style 这三个参数来控制绘图属性,用法类似relplot();
1
2
fmri = pd.read_csv('seaborn-data-master/fmri.csv')
display(fmri)
subjecttimepointeventregionsignal
0s1318stimparietal-0.017552
1s514stimparietal-0.080883
2s1218stimparietal-0.081033
3s1118stimparietal-0.046134
4s1018stimparietal-0.037970
..................
1059s08cuefrontal0.018165
1060s137cuefrontal-0.029130
1061s127cuefrontal-0.004939
1062s117cuefrontal-0.025367
1063s00cueparietal-0.006899

1064 rows × 5 columns

1
ax = sns.lineplot(x='timepoint', y='signal', data=fmri)

表示x、y以外维度变量

类似散点图,可使用hue、style、size来表示第三、第四维变量,也可使用relplot()增加多行多列表示更多维度变量。

1
ax = sns.lineplot(x='timepoint', y='signal', hue='event', style='region', data=fmri)

style参数默认改变线型,使用markersdashes参数改变标记样式,保持线型不变。

1
2
ax = sns.lineplot(x='timepoint', y='signal', hue='event', 
                  style='region', markers=True, dashes=False, data=fmri)

不显示误差带,显示每个点的离散误差棒表示置信区间

err_style控制是否用半透明误差带或离散误差棒绘制置信区间,取值有两个:

  • band:用半透明误差带
  • bars:离散误差棒

ci控制置信区间大小,取值为整数、sd或None。

1
2
ax = sns.lineplot(x='timepoint', y='signal', hue='event', 
                  err_style='bars', ci=68, data=fmri)