我是靠谱客的博主 典雅狗,最近开发中收集的这篇文章主要介绍seaborn,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

参考文档: seaborn 0.9 中文文档

绘制相关关系图像: seaborn.relplot

hue : 对属于不同类别的曲线添加不同颜色
style : 对属于不同类别的曲线添加不同类型的线条样式
size : 对属于不同类别的曲线改变其大小
col : 以行呈现 row : 以列呈现
col_wrap : 以此宽度“包裹”列变量,以便列分面跨越多行。与row分面不兼容。
aspect : 每个面(facet)的纵横比,因此aspect * height给出每个面的宽度,单位为英寸。

分类图绘制: seaborn.catplot

ci : float 或“sd”或 None。
在估计值附近绘制置信区间的大小。如果是“sd”,则跳过自举(bootstrapping)并绘制观察的标准偏差。
heigth : 每个刻面的高度(以英寸为单位)
aspect : 每个面的纵横比,因此aspect * height给出每个面的宽度,单位为英寸。
orient:“v” | “h”, 可选
图的方向(垂直或水平)。这通常是从输入变量的 dtype 推断出来的,但可用于指定“分类”变量何时是数字或何时绘制宽格式数据。
color:matplotlib 颜色,可选
所有元素的颜色,或渐变调色板的种子。
palette:调色板名称,列表或字典,可选(“pastel”,“ch:.25”)
用于色调变量的不同级别的颜色。应该是 color_palette(), 可以解释的东西,或者是将色调级别映射到 matplotlib 颜色的字典。

绘制一个散点图,其中一个变量是分类 :seaborn.stripplot

绘制具有非重叠点的分类散点图:seaborn.swarmplot

绘制箱形图以展现与类别相关的数据分布状况:seaborn.boxplot

为更大的数据集绘制增强的箱型图:seaborn.boxenplot

使用条形图显示每个类别中观测值的数量:seaborn.countplot

绘制数据集中的成对关系:seaborn.pairplot

将矩形数据绘制为颜色编码矩阵:seaborn.heatmap

用于绘制数据集中成对关系的子图网格:seaborn.PairGrid

绘制线性回归的残差: seaborn.residplot

绘制数据和线性回归模型拟合:seaborn.regplot

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

强调线图的连续性

# dict: 强制类型转换为字典类型
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()

# 默认行为是在绘制之前按数字 x 对数据进行排序。但是,这可以被禁用
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'"))

分类散点图

属于一个类别的所有点,将沿着与分类变量对应的轴落在相同位置。

# jitter参数控制抖动的大小,你也可以完全禁用它:
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)
# 先通过query进行数据筛选
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)
# 添加hue语义, 语义变量的每个级别的框沿着分类轴移动,因此它们将不会重叠
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)

绘制单变量分布

# 随机采集服从标准正态分布的100个样本点
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)

最后

以上就是典雅狗为你收集整理的seaborn的全部内容,希望文章能够帮你解决seaborn所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部