hue : 对属于不同类别的曲线添加不同颜色 style : 对属于不同类别的曲线添加不同类型的线条样式 size : 对属于不同类别的曲线改变其大小 col : 以行呈现 row : 以列呈现 col_wrap : 以此宽度“包裹”列变量,以便列分面跨越多行。与row分面不兼容。 aspect : 每个面(facet)的纵横比,因此aspect * height给出每个面的宽度,单位为英寸。
ci : float 或“sd”或 None。 在估计值附近绘制置信区间的大小。如果是“sd”,则跳过自举(bootstrapping)并绘制观察的标准偏差。 heigth : 每个刻面的高度(以英寸为单位) aspect : 每个面的纵横比,因此aspect * height给出每个面的宽度,单位为英寸。 orient:“v” | “h”, 可选 图的方向(垂直或水平)。这通常是从输入变量的 dtype 推断出来的,但可用于指定“分类”变量何时是数字或何时绘制宽格式数据。 color:matplotlib 颜色,可选 所有元素的颜色,或渐变调色板的种子。 palette:调色板名称,列表或字典,可选(“pastel”,“ch:.25”) 用于色调变量的不同级别的颜色。应该是 color_palette(), 可以解释的东西,或者是将色调级别映射到 matplotlib 颜色的字典。
x_estimator:可调用的映射向量 ->标量,可选 将此函数应用于x的每个唯一值并绘制结果的估计值。当x是离散变量时,这是十分有用的。如果给出x_ci,则该估计将被引导并且将绘制置信区间。 logistic:布尔值,可选 如果为“True”,则假设y是二元变量并使用statsmodels来估计逻辑回归模型。 请注意,这比线性回归的计算密集程度要大得多,因此您可能希望减少引导程序重新采样(n_boot)的数量或将 ci设置为“无”。 {x,y}_jitter:浮点数,可选 将此大小的均匀随机噪声添加到“x”或“y”变量中。 在拟合回归之后,噪声被添加到数据的副本中,并且仅影响散点图的外观。 在绘制采用离散值的变量时,这会很有用。 truncate:布尔值,可选 默认情况下,绘制回归线以在绘制散点图后填充 x 轴限制。 如果truncate是True,它将改为受到数据本身限制的限制。 结合 regplot() 和 FacetGrid 来绘制数据集中的多个线性关系。 结合 regplot() 和 JointGrid (与kind="reg"一起使用时)。结合 regplot() 和 PairGrid (当用于 kind =“reg”)。绘制线性回归模型的残差。
案例分析
设置图形风格
import seaborn as sns
sns.set(color_codes=True)
sns.set(style="ticks", color_codes=True)
sns.set_style("whitegrid")
f, ax = plt.subplots(figsize=(7, 3))
相关性分析
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
sns.set()
df = pd.read_excel("../data/boston.xlsx")
print(df.corr())
sns.heatmap(df,cmap='YlGnBu')
sns.pairplot(df)
plt.show()
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()
g = sns.relplot(x="time", y="value", sort=False, kind="line", data=df)
g.fig.autofmt_xdate()
plt.show()
seaborn 的默认行为是通过绘制平均值及 95%的置信区间,在每个x周围聚合多个测量值:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
df=pd.read_csv('../data/fmri.csv')
sns.relplot(x="timepoint", y="signal", kind="line", data=df);
plt.show()
置信区间是使用 bootstrapping 计算的,对于较大的数据集,它可能是时间密集型的。因此,可以禁用它们:
sns.relplot(x="timepoint", y="signal", ci=None, kind="line", data=df)
尤其是对于较大的数据,另一个不错的选择是通过绘制标准差,而不是置信区间来表示分布在每个时间点的分布范围:
sns.relplot(x="timepoint", y="signal", kind="line", ci="sd", data=df)
可以通过设置estimator参数为None,来完全停用聚合。当数据在每个点上有多个观察值时,这可能会产生奇怪的效果。
sns.relplot(x="timepoint", y="signal", estimator=None, kind="line", data=df)
使用不同的语义来对数据进行分组以显示数据类别:
sns.relplot(x="timepoint", y="signal", hue="region", style="event",
dashes=False, markers=True, kind="line", data=df)
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)
一个是通过在列上切面而另一个是在行上切面。当您开始向网格添加更多变量时,您可能希望减小图形大小。请记住,大小FacetGrid由每个切面的高度和长宽比参数化的:
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'"))
属于一个类别的所有点,将沿着与分类变量对应的轴落在相同位置。
sns.catplot(x="day", y="total_bill", jitter=False, data=tips)
????另一种方法使用防止它们重叠的算法沿着分类轴调整点。我们可以用它更好地表示观测分布,但是只适用于相对较小的数据集。这种绘图有时被称为“beeswarm”,可以使用 seaborn 中的swarmplot()绘制,通过在catplot()中设置 kind="swarm"来激活:
sns.catplot(x="day", y="total_bill", kind="swarm", data=tips)
????与关系图类似;可以通过使用hue语义向分类图添加另一个维。(分类图当前不支持size和style语义 )。 每个不同的分类绘图函数以不同方式处理hue 语义。对于散点图,我们只需要更改点的颜色:
sns.catplot(x="day", y="total_bill", hue="sex", kind="swarm", data=tips)
sns.catplot(x="size", y="total_bill", kind="swarm",
data=tips.query("size != 3"))
????选择默认排序的另一个选项是获取数据集中出现的类别级别。也可以使用order参数在特定图表的基础上控制排序。在同一图中绘制多个分类图时,这很重要,我们将在下面看到更多:
sns.catplot(x="smoker", y="tip", order=["No", "Yes"], data=tips)
????第一个是熟悉的boxplot()。它可以显示分布的三个四分位数值以及极值。“胡须”延伸到位于下四分位数和上四分位数的 1.5 IQR 内的点,超出此范围的观察值会独立显示。这意味着箱线图中的每个值对应于数据中的实际观察值。
sns.catplot(x="day", y="total_bill", kind="box", data=tips)
sns.catplot(x="day", y="total_bill", hue="smoker", kind="box", data=tips)
????一个相关的函数boxenplot()可以绘制一个与 Box-plot 类似的图。它为了显示更多信息而对分布的形状进行了优化,比较适合于较大的数据集:
titanic =pd.read_csv('../data/titanic.csv')
sns.catplot(x="sex", y="survived", hue="class", kind="bar", data=titanic)
????条形图的一个特例是,当你想要显示每个类别中的观察数量而不是计算第二个变量的统计数据时。这类似于分类而非定量变量的直方图。在 seaborn 中,使用countplot()函数很容易实现:
sns.catplot(x="deck", kind="count", palette="ch:.25", data=titanic)
sns.catplot(y="deck", hue="class", kind="count",
palette="pastel", edgecolor=".6",
data=titanic)
x = np.random.normal(size=100)
sns.distplot(x)
sns.distplot(x, kde=False, rug=True)
sns.distplot(x, bins=20, kde=False, rug=True)
sns.kdeplot(x, shade=True);
sns.kdeplot(x)
sns.kdeplot(x, bw=.2, label="bw: 0.2")
sns.kdeplot(x, bw=2, label="bw: 2")
plt.legend();
sns.jointplot(x="x", y="y", data=df, kind="kde")
f, ax = plt.subplots(figsize=(6, 6))
sns.kdeplot(df.x, df.y, ax=ax)
sns.rugplot(df.x, color="g", ax=ax)
sns.rugplot(df.y, vertical=True, ax=ax)
x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma)
????要在数据集中绘制多个成对的双变量分布,您可以使用pairplot()函数。 这将创建一个轴矩阵并显示 DataFrame 中每对列的关系,默认情况下,它还绘制对角轴上每个变量的单变量分布:
iris = sns.load_dataset("iris")
sns.pairplot(iris)
g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.kdeplot, n_levels=6)
????regplot() 和 lmplot() :在最简单的调用中,两个函数都绘制了两个变量,x和y,然后拟合回归模型y~x并绘制得到回归线和该回归的 95%置信区间:
sns.regplot(x="total_bill", y="tip", data=tips)
sns.lmplot(x="total_bill", y="tip", data=tips)
????当其中一个变量采用离散值时,可以拟合线性回归。但是,这种数据集生成的简单散点图通常不是最优的:
一种选择是向离散值添加随机噪声(“抖动”),以使这些值分布更清晰。需要注意的是,抖动仅用于散点图数据,而不会影响回归线本身拟合:
sns.lmplot(x="size", y="tip", data=tips, x_jitter=.05)
第二种选择是综合每个离散箱中的观测值,以绘制集中趋势的估计值和置信区间:
sns.lmplot(x="size", y="tip", data=tips, x_estimator=np.mean)
|