统计分析是理解数据集中的变量如何互相关联以及这些关系如依赖其他变量的一个过程。而可视化则是这个过程的一个核心部分,因为只有数据被正确的可视化,人们才能看到主导关系的趋势和模式。
relplot( ),(即:relational plots )是绘制统计关系最常见的函数。
seaborn.relplot(x=None, y=None,
hue=None, size=None, style=None,
data=None,
row=None, col=None,
col_wrap=None, row_order=None, col_order=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=None, dashes=None, style_order=None, legend='brief',
kind='scatter',
height=5, aspect=1, facet_kws=None, **kwargs)
relplot() 主要使用以下两种方法:
(with kind=“scatter”; the default)
即 relplot( )默认是绘制散点图
(with kind=“line”)
说明:
ci:通过设置参数 ci (confidence interval) 来控制阴影部分。
hue:在某一维度上, 用颜色区分(增加变量/维度/特征数量)
style:在某一维度上, 线的表现形式不同, 如 点线, 虚线等(增加变量/维度/特征数量)
size:控制数据点大小或者线条粗细(增加变量/维度/特征数量)
显示分面图
散点图(scatter plot):相关关系(两个变量)
散点图是统计可视化的中流砥柱。它使用点云来描述两个变量的联合分布。散点图的描述可以让我们直接看到大量的信息,帮我们判断出它们之间是否存在有意义的关系。
在 Seaborn 中有许多方法可以绘制散点图,但是最基本的是使用 scatterplot()。记住,当两个变量是数值型的时候,只能使用这种方式。
scatterplot() 是 relplot( ) 的默认种类,当然也可以手动设置 kind=“scatter”。
代码示例:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")
数据导入
tips = sns.load_dataset('tips')
# 绘制二维散点图(两个变量)
sns.relplot(x='total_bill', y='tip', data=tips) # 发现其自带坐标轴名称
可以通过不同的参数传入不同的变量,从而增加了维度。
# 绘制三维散点图(使用参数 hue 增加了一个变量,用不同颜色进行区分。联想到用气泡图表示三维数据)
sns.relplot(x='total_bill', y='tip', hue='smoker', data=tips)
# 其中一变量是连续值的情况
sns.relplot(x="total_bill", y="tip", hue="size", data=tips);
通过不同的参数(style、zize),输入相同的变量,则可以在该变量的维度上进行相应的线条(样式、大小)改变
# 改变变量’smoker‘的样式
sns.relplot(x="total_bill", y="tip", hue="smoker", style="smoker",
data=tips);
# 四变量/四维散点图
sns.relplot(x="total_bill", y="tip", hue="smoker", style="time", data=tips);
线图(line plot):展示连续性(单变量)
散点图非常有用,但却无法做单变量分析。
一个有效的方法是使用线图。
在 Seaborn 中可以使用 lineplot( )函数,或者直接使用 relplot( ),并设置 kind=‘line’
聚合和表示不确定性——设置参数 ci (confidence interval)
设置参数 ci (confidence interval) 来控制阴影部分
注:阴影部分是由于纵坐标上多个值导致的, 取值为均值, 阴影部分是置信区间.
# 默认使用的是围绕平均值的95%置信区间
fmri = sns.load_dataset('fmri')
sns.relplot(x='timepoint', y='signal', kind='line', data=fmri)
# 置信区间是使用自举,也可以将其禁用
sns.relplot(x="timepoint", y="signal", ci=None, kind="line", data=fmri);
# 使用标准偏差而不是置信区间
sns.relplot(x="timepoint", y="signal", kind="line", ci="sd", data=fmri);
绘制语义映射数据子集——其它三个参数 hue, size, and style
sns.relplot(x="timepoint", y="signal", hue="event", kind="line", data=fmri);
sns.relplot(x="timepoint", y="signal", hue="region", style="event",
kind="line", data=fmri);
线图通常用于显示与实际日期和时间相关的数据。
df = pd.DataFrame(dict(time=pd.date_range("2017-1-1", periods=500),
value=np.random.randn(500).cumsum()))
g = sns.relplot(x="time", y="value", kind="line", data=df)
g.fig.autofmt_xdate()
# relplot() 默认 y 是 x 的函数
有时候我们并不想将其它的变量也放入到同一张图中,这时我们就使用分面图去进行可视化。
这表示,我们将针对这个变量,建立多个坐标系和多张子图。(数量与变量的种类数有关)
tips.time
0 Dinner
1 Dinner
2 Dinner
3 Dinner
4 Dinner
...
239 Dinner
240 Dinner
241 Dinner
242 Dinner
243 Dinner
Name: time, Length: 244, dtype: category
Categories (2, object): [Lunch, Dinner]
这里 time 含有 [Lunch, Dinner] 两个种类
sns.relplot(x="total_bill", y="tip", hue="smoker",
col="time", data=tips);
sns.relplot(x="timepoint", y="signal", hue="subject",
col="region", row="event", height=3,
kind="line", estimator=None, data=fmri);
col=“region” :region 有几类,就有几列图(2种 parietal 和 frontal,2列图)
row=“event” :event 有几类,就有几行图
sns.relplot(x="timepoint", y="signal", hue="event", style="event",
col="subject", col_wrap=5,
height=3, aspect=.75, linewidth=2.5,
kind="line", data=fmri.query("region == 'frontal'"));
sns.relplot( )
图示如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
tips = sns.load_dataset('tips')
①
sns.relplot(x='total_bill', y='tip',data=tips)
sns.relplot(x='total_bill', y='tip', hue='tip', data=tips)
# sns.relplot(x='total_bill', y='tip', hue='total_bill, data=tips) # 也可以传入 x的变量
sns.relplot(x='total_bill', y='tip', hue='smoker', data=tips)
与上述通过不同属性的表现方式不同,这里通过参数 row 或者 col,使用多张子图的方式展现第三个变量与 x 和 y 的关系。
sns.relplot(x='total_bill', y='tip', col='smoker', data=tips)