# 可视化统计关系

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);



sns.relplot(x="total_bill", y="tip", hue="smoker", data=tips);



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);



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);



sns.relplot(x="total_bill", y="tip", size="size", data=tips);



matplotlib.pyplot.scatter()不同，变量的值不用于直接决定点的面积。数据单位中的值范围被规范化为面积单位的范围，这个范围可以自定义:

sns.relplot(x="total_bill", y="tip", size="size", sizes=(15, 200), data=tips);



scatterplot()API示例中展示了更多如何通过自定义使用不同语义来显示统计关系的示例。

## 强调线图的连续性

df = pd.DataFrame(dict(time=np.arange(500),
value=np.random.randn(500).cumsum()))
g = sns.relplot(x="time", y="value", kind="line", data=df)
g.fig.autofmt_xdate()



df = pd.DataFrame(np.random.randn(500, 2).cumsum(axis=0), columns=["x", "y"])
sns.relplot(x="x", y="y", sort=False, kind="line", data=df);



### 聚合和表示不确定性

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);



sns.relplot(x="timepoint", y="signal", estimator=None, kind="line", data=fmri);



### Plotting subsets of data with semantic mappings

lineplot()中使用语义也将决定数据的聚合方式。例如，添加具有两个级别的色调语义将绘图分成两行以及错误带，每个都着色以指示它们对应于哪个数据集。

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);



sns.relplot(x="timepoint", y="signal", hue="region", style="event",
dashes=False, markers=True, kind="line", data=fmri);



sns.relplot(x="timepoint", y="signal", hue="event", style="event",
kind="line", data=fmri);



sns.relplot(x="timepoint", y="signal", hue="region",
units="subject", estimator=None,
kind="line", data=fmri.query("event == 'stim'"));



lineplot()中默认的色彩映射和图例的处理还取决于色调语义是类别还是数值：

dots = sns.load_dataset("dots").query("align == 'dots'")
sns.relplot(x="time", y="firing_rate",
hue="coherence", style="choice",
kind="line", data=dots);



palette = sns.cubehelix_palette(light=.8, n_colors=6)
sns.relplot(x="time", y="firing_rate",
hue="coherence", style="choice",
palette=palette,
kind="line", data=dots);



from matplotlib.colors import LogNorm
palette = sns.cubehelix_palette(light=.7, n_colors=6)
sns.relplot(x="time", y="firing_rate",
hue="coherence", style="choice",
hue_norm=LogNorm(),
kind="line", data=dots);



sns.relplot(x="time", y="firing_rate",
size="coherence", style="choice",
kind="line", data=dots);



sns.relplot(x="time", y="firing_rate",
hue="coherence", size="choice",
palette=palette,
kind="line", data=dots);



### 用日期数据绘图

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()



## 显示与切面的多种关系

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);



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'"));



• #### Twisted与异步编程入门

likebeta python 23页 2018年6月29日
158

• #### Python学习知识库

coco369 python 85页 2019年5月26日
190

• #### 零基础学Python

qiwsir python 80页 2018年6月29日
1635

• #### AiLearning: 机器学习

ApacheCN machine-learning 20页 2019年5月26日
14197