Seaborn - 快速指南


Seaborn - 简介

在分析领域,获得见解的最佳方法是可视化数据。数据可以通过将其表示为易于理解、探索和掌握的图表来可视化。此类数据有助于引起关键要素的注意。

为了使用 Python 分析一组数据,我们使用了 Matplotlib,这是一个广泛实现的 2D 绘图库。同样,Seaborn 是一个 Python 可视化库。它构建在 Matplotlib 之上。

Seaborn 与 Matplotlib

总结来说,如果说 Matplotlib“试图让简单的事情变得简单,让困难的事情成为可能”,那么 Seaborn 也试图让一组明确定义的困难事情变得简单。

Seaborn帮助解决Matplotlib面临的两大问题;问题是 -

  • 默认 Matplotlib 参数
  • 使用数据框

由于 Seaborn 对 Matplotlib 的补充和扩展,学习曲线是相当渐进的。如果您了解 Matplotlib,那么您已经了解了 Seaborn 的一半。

Seaborn 的重要特点

Seaborn 构建于 Python 核心可视化库 Matplotlib 之上。它旨在作为补充,而不是替代。然而,Seaborn 具有一些非常重要的功能。让我们在这里看看其中的一些。这些功能有助于 -

  • 用于设置 matplotlib 图形样式的内置主题
  • 可视化单变量和双变量数据
  • 拟合并可视化线性回归模型
  • 绘制统计时间序列数据
  • Seaborn 与 NumPy 和 Pandas 数据结构配合良好
  • 它带有用于设置 Matplotlib 图形样式的内置主题

在大多数情况下,您仍然会使用 Matplotlib 进行简单绘图。建议使用 Matplotlib 知识来调整 Seaborn 的默认绘图。

Seaborn - 环境设置

在本章中,我们将讨论 Seaborn 的环境设置。让我们从安装开始,并了解如何开始。

安装 Seaborn 并开始使用

在本节中,我们将了解安装 Seaborn 所涉及的步骤。

使用 Pip 安装程序

要安装最新版本的 Seaborn,您可以使用 pip -

pip install seaborn

适用于使用 Anaconda 的 Windows、Linux 和 Mac

Anaconda(来自https://www.anaconda.com/是 SciPy 堆栈的免费 Python 发行版。它也适用于 Linux 和 Mac。

也可以使用 conda 安装发布版本 -

conda install seaborn

直接从github安装Seaborn的开发版本

https://github.com/mwaskom/seaborn”

依赖关系

考虑 Seaborn 的以下依赖关系 -

  • Python 2.7 或 3.4+
  • 麻木
  • scipy
  • pandas
  • 绘图库

Seaborn - 导入数据集和库

在本章中,我们将讨论如何导入数据集和库。让我们首先了解如何导入库。

导入库

让我们从导入 Pandas 开始,它是一个用于管理关系(表格格式)数据集的出色库。Seaborn 在处理 DataFrame 时非常方便,DataFrame 是用于数据分析的最广泛使用的数据结构。

以下命令将帮助您导入 Pandas -

# Pandas for managing datasets
import pandas as pd

现在,让我们导入 Matplotlib 库,它可以帮助我们自定义绘图。

# Matplotlib for additional customization
from matplotlib import pyplot as plt

我们将使用以下命令导入 Seaborn 库 -

# Seaborn for plotting and styling
import seaborn as sb

导入数据集

我们已经导入了所需的库。在本节中,我们将了解如何导入所需的数据集。

Seaborn 库中附带了一些重要的数据集。安装 Seaborn 后,数据集会自动下载。

您可以使用这些数据集中的任何一个来进行学习。借助以下函数,您可以加载所需的数据集

load_dataset()

将数据导入为 Pandas DataFrame

在本节中,我们将导入一个数据集。该数据集默认加载为 Pandas DataFrame。如果 Pandas DataFrame 中有任何函数,它就会在这个 DataFrame 上运行。

以下代码行将帮助您导入数据集 -

# Seaborn for plotting and styling
import seaborn as sb
df = sb.load_dataset('tips')
print df.head()

上面的代码行将生成以下输出 -

   total_bill  tip   sex    smoker day  time   size
0    16.99    1.01   Female  No    Sun  Dinner  2
1    10.34    1.66   Male    No    Sun  Dinner  3
2    21.01    3.50   Male    No    Sun  Dinner  3
3    23.68    3.31   Male    No    Sun  Dinner  2
4    24.59    3.61   Female  No    Sun  Dinner  4

要查看 Seaborn 库中的所有可用数据集,您可以使用以下命令和get_dataset_names()函数,如下所示 -

import seaborn as sb
print sb.get_dataset_names()

上面的代码行将返回可用的数据集列表,作为以下输出

[u'anscombe', u'attention', u'brain_networks', u'car_crashes', u'dots', 
u'exercise', u'flights', u'fmri', u'gammas', u'iris', u'planets', u'tips', 
u'titanic']

DataFrames以矩形网格的形式存储数据,通过它可以轻松地查看数据。矩形网格的每一行都包含一个实例的值,网格的每一列都是一个向量,其中保存特定变量的数据。这意味着 DataFrame 的行不需要包含相同数据类型的值,它们可以是数字、字符、逻辑等。Python 的 DataFrame 附带 Pandas 库,它们被定义为二维标记数据结构具有可能不同类型的列。

有关 DataFrame 的更多详细信息,请访问我们的pandas教程。

Seaborn - 身材美学

可视化数据是第一步,进一步使可视化数据更令人愉悦是另一步。可视化在向观众传达定量见解以吸引他们的注意力方面发挥着至关重要的作用。

美学是指与美的本质和欣赏有关的一套原则,尤其是在艺术中。可视化是一门以有效且最简单的方式表示数据的艺术。

Matplotlib 库高度支持自定义,但使用它时应该了解要调整哪些设置来实现有吸引力且预期的绘图。与 Matplotlib 不同,Seaborn 包含定制主题和高级界面,用于定制和控制 Matplotlib 图形的外观。

例子

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5): 
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
sinplot()
plt.show()

这是默认 Matplotlib 下绘图的样子 -

绘图库

要将同一绘图更改为 Seaborn 默认值,请使用set()函数 -

例子

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set()
sinplot()
plt.show()

输出

输出

上面两图显示了默认 Matplotlib 和 Seaborn 绘图的差异。数据的表示形式相同,但表示风格有所不同。

基本上,Seaborn 将 Matplotlib 参数分为两组 -

  • 绘图样式
  • 地块规模

Seaborn 人物样式

操作样式的接口是set_style()。使用此功能您可以设置Plotly的主题。根据最新更新的版本,以下是可用的五个主题。

  • 暗格
  • 怀特格
  • 黑暗的
  • 白色的
  • 蜱虫

让我们尝试应用上述列表中的主题。绘图的默认主题将是我们在前面的示例中看到的darkgrid 。

例子

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip=1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("whitegrid")
sinplot()
plt.show()

输出

暗面

上面两张图的区别在于背景颜色

移除轴刺

在白色和刻度主题中,我们可以使用despine()函数删除顶部和右侧的轴刺。

例子

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip=1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("white")
sinplot()
sb.despine()
plt.show()

输出

刺

在常规图中,我们仅使用左轴和下轴。使用despine()函数,我们可以避免不必要的右轴和上轴脊柱,这是 Matplotlib 不支持的。

覆盖元素

如果您想自定义 Seaborn 样式,可以将参数字典传递给set_style()函数。使用axes_style()函数查看可用参数。

例子

import seaborn as sb
print sb.axes_style

输出

{'axes.axisbelow'     : False,
'axes.edgecolor'      : 'white',
'axes.facecolor'      : '#EAEAF2',
'axes.grid'           : True,
'axes.labelcolor'     : '.15',
'axes.linewidth'      : 0.0,
'figure.facecolor'    : 'white',
'font.family'         : [u'sans-serif'],
'font.sans-serif'     : [u'Arial', u'Liberation  
                        Sans', u'Bitstream Vera Sans', u'sans-serif'],
'grid.color'          : 'white',
'grid.linestyle'      : u'-',
'image.cmap'          : u'Greys',
'legend.frameon'      : False,
'legend.numpoints'    : 1,
'legend.scatterpoints': 1,
'lines.solid_capstyle': u'round',
'text.color'          : '.15',
'xtick.color'         : '.15',
'xtick.direction'     : u'out',
'xtick.major.size'    : 0.0,
'xtick.minor.size'    : 0.0,
'ytick.color'         : '.15',
'ytick.direction'     : u'out',
'ytick.major.size'    : 0.0,
'ytick.minor.size'    : 0.0}

更改任何参数的值都会改变绘图样式。

例子

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip=1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("darkgrid", {'axes.axisbelow': False})
sinplot()
sb.despine()
plt.show()

输出

元素

缩放绘图元素

我们还可以控制绘图元素,并可以使用set_context()函数控制绘图的比例。我们预设了四个上下文模板,根据相对大小,上下文命名如下

  • 笔记本
  • 讲话
  • 海报

默认情况下,上下文设置为笔记本;并在上面的图中使用。

例子

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("darkgrid", {'axes.axisbelow': False})
sinplot()
sb.despine()
plt.show()

输出

缩放

与上面的图相比,实际图的输出尺寸更大。

注意- 由于我们网页上图像的缩放,您可能会错过示例图中的实际差异。

Seaborn - 调色板

颜色在可视化中比任何其他方面都起着重要的作用。如果有效使用,颜色可以为Plotly增添更多价值。调色板是指画家在其上排列和混合颜料的平坦表面。

建筑调色板

Seaborn 提供了一个名为color_palette()的函数,可用于为绘图提供颜色并为其添加更多美学价值。

用法

seaborn.color_palette(调色板=无,n_colors =无,desat =无)

范围

下表列出了构建调色板的参数 -

先生。 口味和描述
1

n_颜色

调色板中的颜色数量。如果没有,默认值将取决于调色板的指定方式。默认情况下, n_colors的值为6 种颜色。

2

脱盐

每种颜色去饱和度的比例。

返回

返回指的是 RGB 元组列表。以下是现成的 Seaborn 调色板 -

  • 深的
  • 静音
  • 明亮的
  • 粉彩
  • 黑暗的
  • 色盲

除此之外,还可以生成新的调色板

在不了解数据特征的情况下,很难决定对给定数据集使用哪个调色板。意识到这一点,我们将对使用color_palette()类型的不同方式进行分类 -

  • 定性的
  • 顺序的
  • 发散的

我们还有另一个处理调色板的函数seaborn.palplot() 。该函数将调色板绘制为水平数组。在接下来的示例中,我们将了解有关seaborn.palplot()的更多信息。

定性调色板

定性或分类调色板最适合绘制分类数据。

例子

from matplotlib import pyplot as plt
import seaborn as sb
current_palette = sb.color_palette()
sb.palplot(current_palette)
plt.show()

输出

颜色

我们没有在color_palette() 中传递任何参数;默认情况下,我们看到 6 种颜色。您可以通过将值传递给n_colors参数来查看所需的颜色数量。这里,palplot()用于水平绘制颜色数组。

连续调色板

时序图适合表达一定范围内从相对较低值到较高值的数据分布。

将附加字符“s”附加到传递给颜色参数的颜色将绘制顺序图。

例子

from matplotlib import pyplot as plt
import seaborn as sb
current_palette = sb.color_palette()
sb.palplot(sb.color_palette("Greens"))
plt.show()
网格

注意 -我们需要将“s”附加到参数上,如上例中的“Greens”。

发散的调色板

发散的调色板使用两种不同的颜色。每种颜色代表从公共点到任一方向的值的变化。

假设绘制从 -1 到 1 范围内的数据。从 -1 到 0 的值采用一种颜色,0 到 +1 的值采用另一种颜色。

默认情况下,这些值以零为中心。您可以通过传递值来使用参数中心来控制它。

例子

from matplotlib import pyplot as plt
import seaborn as sb
current_palette = sb.color_palette()
sb.palplot(sb.color_palette("BrBG", 7))
plt.show()

输出

棕色的

设置默认调色板

函数color_palette()有一个同伴函数set_palette()。它们之间的关系类似于美学章节中介绍的对。set_palette()color_palette() 的参数相同,但默认的 Matplotlib 参数已更改,以便调色板用于所有绘图。

例子

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)

import seaborn as sb
sb.set_style("white")
sb.set_palette("husl")
sinplot()
plt.show()

输出

图形

绘制单变量分布

数据的分布是我们在分析数据时需要了解的最重要的事情。在这里,我们将看到seaborn如何帮助我们理解数据的单变量分布。

函数distplot()提供了快速查看单变量分布的最便捷方法。该函数将绘制适合数据核密度估计的直方图。

用法

seaborn.distplot()

参数

下表列出了参数及其描述 -

先生。 参数及说明
1

数据

系列、一维数组或列表

2

垃圾箱

历史箱规格

3

历史

布尔值

4

克德

布尔值

这些是需要研究的基本且重要的参数。

Seaborn - 直方图

直方图通过沿着数据范围形成箱,然后绘制条形来显示每个箱中的观测值数量来表示数据分布。

Seaborn 附带了一些数据集,我们在前面的章节中使用了很少的数据集。我们已经学习了如何加载数据集以及如何查找可用数据集的列表。

Seaborn 附带了一些数据集,我们在前面的章节中使用了很少的数据集。我们已经学习了如何加载数据集以及如何查找可用数据集的列表。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.distplot(df['petal_length'],kde = False)
plt.show()

输出

直方图

这里,kde标志设置为 False。因此,核估计图的表示将被删除,仅绘制直方图。

Seaborn - 内核密度估计

核密度估计(KDE)是一种估计连续随机变量的概率密度函数的方法。它用于非参数分析。

在distplot中将hist标志设置为 False将生成核密度估计图。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.distplot(df['petal_length'],hist=False)
plt.show()

输出

图形

拟合参数分布

distplot()用于可视化数据集的参数分布。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.distplot(df['petal_length'])
plt.show()

输出

直方图

绘制二元分布图

双变量分布用于确定两个变量之间的关系。这主要处理两个变量之间的关系以及一个变量相对于另一个变量的Behave方式。

在seaborn中分析双变量分布的最佳方法是使用jointplot()函数。

Jointplot 创建一个多面板图形,用于投影两个变量之间的双变量关系以及每个变量在不同轴上的单变量分布。

散点图

散点图是可视化分布的最便捷方法,其中每个观测值通过 x 和 y 轴以二维图表示。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.jointplot(x = 'petal_length',y = 'petal_width',data = df)
plt.show()

输出

条形图和直方图

上图展示了Iris数据中petal_lengthpetal_width之间的关系。图中的趋势表明所研究的变量之间存在正相关。

六边形图

当数据密度稀疏时,即当数据非常分散且难以通过散点图进行分析时,六边形分箱用于双变量数据分析。

称为“kind”的加法参数和值“hex”绘制十六进制图。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.jointplot(x = 'petal_length',y = 'petal_width',data = df,kind = 'hex')
plt.show()
六边形和酒吧

核密度估计

核密度估计是估计变量分布的非参数方法。在seaborn中,我们可以使用jointplot()绘制kde

将值“kde”传递给参数 kind 以绘制核图。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.jointplot(x = 'petal_length',y = 'petal_width',data = df,kind = 'hex')
plt.show()

输出

X射线

Seaborn - 可视化配对关系

实时研究的数据集包含许多变量。在这种情况下,应该分析每个变量之间的关系。绘制 (n,2) 组合的双变量分布将是一个非常复杂且耗时的过程。

要绘制数据集中的多个成对二元分布,可以使用pairplot()函数。这将 DataFrame 中变量的 (n,2) 组合的关系显示为图矩阵,对角图是单变量图。

在本节中,我们将了解什么是 Axes、它们的用法、参数等。

用法

seaborn.pairplot(data,…)

参数

下表列出了轴的参数 -

先生。 参数及说明
1

数据

数据框

2

色调

数据中的变量可将绘图方面映射到不同的颜色。

3

调色板

用于映射色调变量的颜色集

4

种类

非身份关系的一种Plotly。{'分散', '规则'}

5

诊断类型

对角线子图的一种图。{'hist', 'kde'}

除了数据之外,所有其他参数都是可选的。pairplot可以接受的其他参数很少。上面提到的都是经常使用的参数。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.set_style("ticks")
sb.pairplot(df,hue = 'species',diag_kind = "kde",kind = "scatter",palette = "husl")
plt.show()

输出

多重图

我们可以观察每个图中的变化。绘图采用矩阵格式,其中行名称代表 x 轴,列名称代表 y 轴。

对角线图是核密度图,其中其他图是如上所述的散点图。

Seaborn - 绘制分类数据

在前面的章节中,我们学习了散点图、hexbin 图和 kde 图,它们用于分析所研究的连续变量。当所研究的变量是分类变量时,这些图不合适。

当所研究的一个或两个变量都是分类变量时,我们使用 striplot()、swarmplot() 等绘图。Seaborn 提供了执行此操作的接口。

分类散点图

在本节中,我们将学习分类散点图。

带状图()

当研究的变量之一是分类变量时,使用 stripplot()。它表示沿任一轴排序的数据。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.stripplot(x = "species", y = "petal_length", data = df)
plt.show()

输出

盒子

在上图中,我们可以清楚地看到每个物种的petal_length的差异。但是,上述散点图的主要问题是散点图上的点重叠。我们使用“Jitter”参数来处理这种情况。

抖动会给数据添加一些随机噪声。此参数将调整沿分类轴的位置。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.stripplot(x = "species", y = "petal_length", data = df, jitter = Ture)
plt.show()

输出

点

现在,可以很容易地看到点的分布。

群图()

另一个可以替代“Jitter”的选项是函数swarmplot()。该函数将散点图的每个点定位在分类轴上,从而避免重叠点 -

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.swarmplot(x = "species", y = "petal_length", data = df)
plt.show()

输出

色调

Seaborn - 观测值分布

在我们在上一章中处理的分类散点图中,该方法所能提供的有关每个类别内值分布的信息受到限制。现在,更进一步,让我们看看什么可以帮助我们在类别中进行比较。

箱线图

箱线图是一种通过四分位数可视化数据分布的便捷方法。

箱线图通常具有从箱体延伸的垂直线,称为晶须。这些须线表示上四分位数和下四分位数之外的变异性,因此箱线图也称为箱须图和箱须图。数据中的任何离群值都会绘制为单独的点。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.swarmplot(x = "species", y = "petal_length", data = df)
plt.show()

输出

压缩的

图中的点表示异常值。

小提琴Plotly

小提琴图是箱线图与核密度估计的组合。因此,这些图更容易分析和理解数据的分布。

让我们使用名为“tips”的数据集来了解小提琴图的更多信息。该数据集包含与餐厅顾客给出的小费相关的信息。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.violinplot(x = "day", y = "total_bill", data=df)
plt.show()

输出

阶段

箱线图中的四分位数和须线值显示在小提琴内部。由于小提琴图使用 KDE,小提琴较宽的部分表示较高的密度,而较窄的区域表示相对较低的密度。箱线图中的四分位数范围和 kde 中的较高密度部分落在小提琴图每个类别的相同区域中。

上图显示了一周四天的total_bill 分布情况。但是,除此之外,如果我们想了解分布在性别方面的表现,让我们在下面的示例中进行探索。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.violinplot(x = "day", y = "total_bill",hue = 'sex', data = df)
plt.show()

输出

不同之处

现在我们可以清楚地看到男性和女性之间的消费Behave。从剧情来看,我们可以很容易地说,男性比女性赚更多的钱。

而且,如果色调变量只有两个类别,我们可以通过在给定的一天将每把小提琴分成两把而不是两把小提琴来美化Plotly。小提琴的任一部分都引用了色调变量中的每个类别。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.violinplot(x = "day", y="total_bill",hue = 'sex', data = df)
plt.show()

输出

多级

Seaborn - 统计估算

在大多数情况下,我们处理数据整体分布的估计。但是当涉及到集中趋势估计时,我们需要一种特定的方式来总结分布。均值和中位数是估计分布集中趋势的常用技术。

在我们在上一节中学到的所有图中,我们对整个分布进行了可视化。现在,让我们讨论可以用来估计分布集中趋势的图。

条形图

barplot ()显示分类变量和连续变量之间的关系。数据以矩形条表示,其中条的长度表示该类别中数据的比例。

条形图代表集中趋势的估计。让我们使用“泰坦尼克号”数据集来学习条形图。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('titanic')
sb.barplot(x = "sex", y = "survived", hue = "class", data = df)
plt.show()

输出

条形图

在上面的例子中,我们可以看到每个班级中男性和女性的平均生存数。从图中我们可以了解到,存活下来的女性数量多于男性。无论是男性还是女性,来自头等舱的幸存者数量都较多。

条形图的一个特殊情况是显示每个类别中的观察数量,而不是计算第二个变量的统计量。为此,我们使用countplot()。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('titanic')
sb.countplot(x = " class ", data = df, palette = "Blues");
plt.show()

输出

条状图

Plot表示,三等舱的乘客人数比一等舱和二等舱的乘客人数要多。

点图

点图与条形图的作用相同,但风格不同。估计值不是用完整的条形图,而是由另一个轴上特定高度的点表示。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('titanic')
sb.pointplot(x = "sex", y = "survived", hue = "class", data = df)
plt.show()

输出

z符号

Seaborn - 绘制宽格式数据

最好使用“long-from”或“tidy”数据集。但有时,当我们别无选择,只能使用“宽格式”数据集时,相同的函数也可以应用于各种格式的“宽格式”数据,包括 Pandas 数据框或二维 NumPy数组。这些对象应直接传​​递给数据参数,x 和 y 变量必须指定为字符串

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.boxplot(data = df, orient = "h")
plt.show()

输出

楷模

此外,这些函数接受 Pandas 或 NumPy 对象的向量,而不是 DataFrame 中的变量。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
sb.boxplot(data = df, orient = "h")
plt.show()

输出

设计

对于 Python 世界中的许多开发人员来说,使用 Seaborn 的主要优点是它可以将 pandas DataFrame 对象作为参数。

Seaborn - 多面板分类图

我们可以使用两个图来可视化分类数据,您可以使用函数pointplot()或更高级别的函数Factorplot()

因子图

Factorplot 在 FacetGrid 上绘制分类图。使用“kind”参数,我们可以选择箱线图、小提琴图、条形图和条形图等绘图。FacetGrid 默认使用点图。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('exercise')
sb.factorplot(x = "time", y = pulse", hue = "kind",data = df);
plt.show()

输出

L形

我们可以使用kind参数使用不同的图来可视化相同的数据。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('exercise')
sb.factorplot(x = "time", y = "pulse", hue = "kind", kind = 'violin',data = df);
plt.show()

输出

锋利的

在因子图中,数据绘制在面网格上。

什么是面网格?

分面网格通过划分变量形成由行和列定义的面板矩阵。由于面板的原因,单个图看起来像多个图。分析两个离散变量的所有组合非常有帮助。

让我们用一个例子来形象化上面的定义

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('exercise')
sb.factorplot(x = "time", y = "pulse", hue = "kind", kind = 'violin', col = "diet", data = df);
plt.show()

输出

两种类型

使用 Facet 的优点是,我们可以在图中输入另一个变量。上图根据第三个变量(称为“饮食”)使用“col”参数分为两个图。

我们可以制作许多列面并将它们与网格的行对齐 -

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('titanic')
sb.factorplot("alive", col = "deck", col_wrap = 3,data = df[df.deck.notnull()],kind = "count")
plt.show()

输出

各种类型

Seaborn - 线性关系

大多数时候,我们使用包含多个定量变量的数据集,分析的目标通常是将这些变量相互关联。这可以通过回归线来完成。

在构建回归模型时,我们经常检查多重共线性,即我们必须查看连续变量的所有组合之间的相关性,并采取必要的措施消除多重共线性(如果存在)。在这种情况下,以下技术会有所帮助。

绘制线性回归模型的函数

Seaborn 有两个主要函数来可视化通过回归确定的线性关系。这些函数是regplot()lmplot()

regplot 与 lmplot

正则图 绘图
接受各种格式的 x 和 y 变量,包括简单的 numpy 数组、pandas Series 对象或作为对 pandas DataFrame 中变量的引用 将数据作为必需参数,并且 x 和 y 变量必须指定为字符串。这种数据格式称为“长格式”数据

现在让我们绘制图。

例子

在本例中使用相同的数据绘制 regplot 和 lmplot

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.regplot(x = "total_bill", y = "tip", data = df)
sb.lmplot(x = "total_bill", y = "tip", data = df)
plt.show()

输出

您可以看到两个图之间的大小差异。

缩放和放大镜

当其中一个变量取离散值时,我们还可以拟合线性回归

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.lmplot(x = "size", y = "tip", data = df)
plt.show()

输出

崎岖

拟合不同类型的模型

上面使用的简单线性回归模型拟合起来非常简单,但在大多数情况下,数据是非线性的,上述方法无法概括回归线。

让我们使用 Anscombe 的数据集和回归图 -

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('anscombe')
sb.lmplot(x="x", y="y", data=df.query("dataset == 'I'"))
plt.show()
虚线图

在这种情况下,数据非常适合方差较小的线性回归模型。

让我们看另一个例子,其中数据偏差很大,这表明最佳拟合线不好。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('anscombe')
sb.lmplot(x = "x", y = "y", data = df.query("dataset == 'II'"))
plt.show()

输出

一半

该图显示数据点与回归线的高度偏差。这种非线性、高阶可以使用lmplot()regplot()进行可视化。这些可以拟合多项式回归模型来探索数据集中简单类型的非线性趋势 -

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('anscombe')
sb.lmplot(x = "x", y = "y", data = df.query("dataset == 'II'"),order = 2)
plt.show()

输出

抛物线

Seaborn - 面网格

探索中维数据的一种有用方法是在数据集的不同子集上绘制同一图的多个实例。

这种技术通常被称为“格子”或“网格”绘图,它与“小倍数”的概念有关。

要使用这些功能,您的数据必须位于 Pandas DataFrame 中。

绘制小倍数的数据子集

在上一章中,我们看到了 FacetGrid 示例,其中 FacetGrid 类有助于使用多个面板可视化一个变量的分布以及数据集子集中多个变量之间的关系。

FacetGrid 最多可以用三个维度来绘制:行、列和色调。前两个与所得的轴数组有明显的对应关系;将色调变量视为沿深度轴的第三个维度,其中不同的级别用不同的颜色绘制。

FacetGrid对象采用数据帧作为输入以及将形成网格的行、列或色调维度的变量名称。

变量应该是分类的,并且变量每个级别的数据将用于沿该轴的方面。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
g = sb.FacetGrid(df, col = "time")
plt.show()

输出

图表

在上面的例子中,我们刚刚初始化了facetgrid对象,它没有在上面绘制任何东西。

在此网格上可视化数据的主要方法是使用FacetGrid.map()方法。让我们使用直方图来查看每个子集中提示的分布。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
g = sb.FacetGrid(df, col = "time")
g.map(plt.hist, "tip")
plt.show()

输出

差异化

由于参数 col 的原因,绘图的数量不止一个。我们在前面的章节中讨论了 col 参数。

要制作关系图,请传递多个变量名称。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
g = sb.FacetGrid(df, col = "sex", hue = "smoker")
g.map(plt.scatter, "total_bill", "tip")
plt.show()

输出

比率

Seaborn - 配对网格

PairGrid 允许我们使用相同的绘图类型绘制子图网格来可视化数据。

与 FacetGrid 不同,它为每个子图使用不同的变量对。它形成了子图矩阵。有时也称为“散点图矩阵”。

pairgrid的用法与facetgrid类似。首先初始化网格,然后传递绘图函数。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
g = sb.PairGrid(df)
g.map(plt.scatter);
plt.show()
多种型号

还可以在对角线上绘制不同的函数来显示每列中变量的单变量分布。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
g = sb.PairGrid(df)
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter);
plt.show()

输出

直方图点

我们可以使用另一个分类变量自定义这些图的颜色。例如,鸢尾花数据集对三种不同种类的鸢尾花中的每一种都有四个测量值,因此您可以看到它们有何不同。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
g = sb.PairGrid(df)
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter);
plt.show()

输出

有色

我们可以在上三角和下三角中使用不同的函数来查看关系的不同方面。

例子

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('iris')
g = sb.PairGrid(df)
g.map_upper(plt.scatter)
g.map_lower(sb.kdeplot, cmap = "Blues_d")
g.map_diag(sb.kdeplot, lw = 3, legend = False);
plt.show()

输出

各种Plotly