统计关系可视化
最常用的关系可视化的函数是 relplot
- 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)
- Figure-level interface for drawing relational plots onto a FacetGrid.
详细的 API 解释在此
replot 通过参数颜色 / 色调 (hue), 大小(size) 和形状 / 风格 (style) 可以额外表达三个变量的信息.
散点图 scatter plot
线图 line plot
当数据类型都是 numberic 的时候, 最常用的是 scatterplot().
relplot 的默认 kind 是'scatter', 代表 scatterplot.
- import seaborn as sns
- sns.set()
- tips = sns.load_dataset("tips")
我们加载 tips 这个数据集. 这是一个描述了客户用餐及小费的数据集.
下面简要的看一下这个数据集前几行.
- tips = sns.load_dataset("tips")
- sns.relplot(x="total_bill", y="tip", data=tips);
这时候可以看到我们绘制出了 total_bill,tip 两种数据的散点图.
现在我们想再在图上添加这个就餐的顾客抽不抽烟. 我们可以
sns.relplot(x="total_bill", y="tip", hue="smoker", data=tips);
为了进一步增加辨识度, 可以进一步改进如下:
sns.relplot(x="total_bill", y="tip",hue="smoker",style="smoker",data=tips);
此时, 颜色和形状表达的都是是否为 smoker 这一信息.
你也可以用 hue 和 style 分别表示不同的信息.
sns.relplot(x="total_bill", y="tip", hue="smoker", style="time", data=tips);
此时, 既有蓝色的圆(顾客抽烟, 吃的午饭), 也有黄色的圆(顾客不抽烟, 吃的午饭). 蓝色的 *(顾客抽烟, 吃的晚饭), 黄色的 *(顾客不抽烟, 吃的晚饭).
上面的图 hue='smoker'.smoker 是一个分类变量(categorical), 当 hue='size'时, size 是一个 numeric 变量. 着色方案会更改.
sns.relplot(x="total_bill", y="tip", hue="size", data=tips);
你可以定制化自己的着色方案.
sns.relplot(x="total_bill", y="tip", hue="size", palette="ch:r=-.5,l=.75", data=tips);
size 参数可以改变大小.
下面讲线图
有的数据集, 你可能想探索一下连续变量的变化情况. 这时候线图就派上用场了.
你可以用 lineplot()或者 relplot(kind='line')
- df = pd.DataFrame(dict(time=np.arange(500),
- value=np.random.randn(500).cumsum()))
看一下这个数据集, time 是递增的 time,value 是浮点数.
对于 x 变量的相同值, 更复杂的数据集将具有多个测量值. seaborn 中的默认行为是通过绘制均值和围绕均值的 95% 置信区间来聚合每个 x 值上的多个测量值:
- fmri = sns.load_dataset("fmri")
- sns.relplot(x="timepoint", y="signal", kind="line", data=fmri);
可以通过 ci 参数控制是否绘制这个区间, 因为大数据集下区间的绘制比较耗时.
- sns.relplot(x="timepoint", y="signal", kind="line", ci="sd", data=fmri);
- sns.relplot(x="timepoint", y="signal", kind="line", ci=None, data=fmri);
类似于点图, 也可以利用颜色, 形状之类的参数来表达变量信息.
- sns.relplot(x="timepoint", y="signal", hue="region", style="event",
- dashes=True, markers=True, kind="line", data=fmri);
用 facets 表达多变量之间的关系
relplot()是基于 FacetGrid 的, 所以很容易做到这一点. 那么, 你可以在多个轴上绘制数据集.
比如对 tips 数据集, time 的值有 Lunch 和 Dinner. 之前我们是用 hue/style 来表示这个信息的. 现在我们可以这么做:
- sns.relplot(x="total_bill", y="tip", hue="smoker",
- col="time", data=tips);
从更多的 facet 绘制数据:
- sns.relplot(x="timepoint", y="signal", hue="subject",
- col="region", row="event", height=3,
- kind="line", estimator=None, data=fmri);
- 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'"));
col_wrap 表示一行展示几个图.
来源: https://www.cnblogs.com/sdu20112013/p/10078385.html