Seaborn 简明教程

Seaborn - Quick Guide

Seaborn - Introduction

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

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

Seaborn Vs Matplotlib

概括起来,如果 Matplotlib “试图使简单的事情变得简单而困难的事情成为可能”,Seaborn 也试图使一组明确定义的困难的事情变得简单。”

Seaborn 帮助解决了 Matplotlib 面临的两个主要问题;问题是 -

  1. Default Matplotlib parameters

  2. Working with data frames

由于 Seaborn 对 Matplotlib 作了补充和扩展,因此学习曲线非常平缓。如果您了解 Matplotlib,那么您已经完成了一半的 Seaborn。

Important Features of Seaborn

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

  1. 用于设置 matplotlib 图形样式的内建主题

  2. 可视化单变量和双变量数据

  3. 安装和可视化线性回归模型

  4. 绘制统计时间序列数据

  5. Seaborn 与 NumPy 和 Pandas 数据结构配合得很好

  6. 它带有一些用于设置 Matplotlib 图形样式的内建主题

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

Seaborn - Environment Setup

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

Installing Seaborn and getting started

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

Using Pip Installer

要安装 Seaborn 的最新版本,你可以使用 pip −

pip install seaborn

For Windows, Linux & Mac using Anaconda

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

还可以使用 conda 安装已发布的版本 −

conda install seaborn

To install the development version of Seaborn directly from github

Dependencies

考虑以下 Seaborn 依赖项−

  1. Python 2.7 or 3.4+

  2. numpy

  3. scipy

  4. pandas

  5. matplotlib

Seaborn - Importing Datasets and Libraries

在本教程中,我们将讨论如何导入数据集和库。我们从了解如何导入库开始。

Importing Libraries

我们首先导入 Pandas,这是一个用于管理关系型(表格格式)数据集的好库。处理数据帧时 Seaborn 非常方便,数据帧是数据分析中最常用的数据结构。

以下命令将帮助你导入 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

Importing Datasets

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

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

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

load_dataset()

Importing Data as Pandas DataFrame

在本节中,我们将导入一个数据集。该数据集默认加载为 Pandas 数据帧。如果 Pandas 数据帧中存在任何函数,则这些函数可在此数据帧上运行。

以下代码行将帮助你导入数据集 −

# 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 以矩形网格的形式存储数据,通过这些网格可以轻松地概览数据。矩形网格的每一行都包含一个实例的值,而网格的每一列都是一个向量,其中包含特定变量的数据。这意味着数据帧的行不需要包含相同数据类型的值,它们可以是数字、字符、逻辑值等。Python 的数据框随 Pandas 库一起提供,并且它们被定义为具有不同类型的列的二维标签数据结构。

有关数据帧的更多详细信息,请访问我们 tutorial 上有关熊猫的内容。

Seaborn - Figure Aesthetic

可视化数据是一个步骤,进一步美化可视数据则是另一个步骤。可视化在向受众传达定量洞察方面发挥着至关重要的作用,以吸引他们的注意力。

美学是指与自然和对美的欣赏有关的一组原则,尤其是在艺术中。可视化以尽可能有效和最简单的方式呈现数据的艺术。

Matplotlib 库高度支持自定义,但要知道需要调整哪些设置才能实现有吸引力和预期的情节,这是应该了解的。与 Matplotlib 不同,Seaborn 附带自定义主题和用于自定义和控制 Matplotlib 图形外观的高级界面。

Example

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 绘制的情节 −

matplotlib

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

Example

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

Output

output

以上两幅图显示了默认 Matplotlib 和 Seaborn 图表之间的差异。数据的表示方式相同,但在两者中表示样式有所不同。

基本上,Seaborn 将 Matplotlib 参数分成两组 −

  1. Plot styles

  2. Plot scale

Seaborn Figure Styles

用于操作样式的界面是 set_style() 。使用此功能,您可以设置绘制的主题。根据最新更新版本,以下是可用的五种主题。

  1. Darkgrid

  2. Whitegrid

  3. Dark

  4. White

  5. Ticks

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

Example

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

Output

darkside

以上两幅图的区别是背景色

Removing Axes Spines

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

Example

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

Output

spines

在常规绘图中,我们只使用左和下轴。使用 despine() 函数,我们可以避免不必要的右和上轴刺,Matplotlib 中不支持这一点。

Overriding the Elements

如果您想自定义 Seaborn 样式,您可以将参数词典传递给 set_style() *function. Parameters available are viewed using *axes_style() 函数。

Example

import seaborn as sb
print sb.axes_style

Output

{'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}

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

Example

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

Output

elements

Scaling Plot Elements

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

  1. Paper

  2. Notebook

  3. Talk

  4. Poster

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

Example

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

Output

scaling

与上面的绘图相比,实际绘图的输出大小更大。

Note − 由于我们在网页上缩放图像,您可能会错过示例绘图中的实际差异。

Seaborn - Color Palette

颜色在可视化中扮演着比任何其他方面都重要的角色。有效使用时,颜色将为图形增加更多价值。调色板是一种画家用来排列和混合颜料的平面。

Building Color Palette

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

Usage

seaborn.color_palette(palette = None, n_colors = None, desat = None)

Parameter

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

Sr.No.

Palatte & Description

1

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

2

desat 使每种颜色去饱和的比例。

Return

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

  1. Deep

  2. Muted

  3. Bright

  4. Pastel

  5. Dark

  6. Colorblind

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

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

  1. qualitative

  2. sequential

  3. diverging

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

Qualitative Color Palettes

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

Example

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

Output

colour

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

Sequential Color Palettes

递增图形适用于表述从相对较低值到范围内较高值的的数据分布。

将附加字符“s”追加到传递给 color 参数的颜色将绘制递增图形。

Example

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

注意 − 我们需要将“s”追加到绿色之类的参数中,如上述示例所示。

Diverging Color Palette

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

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

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

Example

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

Output

brown

Setting the Default Color Palette

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

Example

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

Output

pallete

Plotting Univariate Distribution

在分析数据时,首先需要了解数据分布。在这里,我们将了解 seaborn 如何帮助我们理解数据的单变量分布。

distplot() 函数提供了查看单变量分布的最便捷途径。此函数会绘制一个符合数据的核密度估计的直方图。

Usage

seaborn.distplot()

Parameters

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

Sr.No.

Parameter & Description

1

data 系列、1d 数组或列表

2

bins Specification of hist bins

3

hist bool

4

kde bool

这些是需要了解的基本且重要的参数。

Seaborn - Histogram

直方图通过沿数据范围形成垃圾箱,然后绘制条形图来显示每个垃圾箱中的观察结果数量,以表示数据分布。

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

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

Example

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

Output

histogram

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

Seaborn - Kernel Density Estimates

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

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

Example

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

Output

curve

Fitting Parametric Distribution

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

Example

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

Output

bar

Plotting Bivariate Distribution

双变量分布用于确定两个变量之间的关系。这主要涉及两个变量之间的关系,以及一个变量如何相对于另一个变量而表现。

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

Jointplot 创建一个多面板图,其中投射了两个变量之间的双变量关系,还投射了每个变量在不同轴上的单变量分布。

Scatter Plot

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

Example

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

Output

clubed

上图显示了鸢尾花数据中 petal_lengthpetal_width 之间的关系。该图中的一条趋势表示,被研究变量之间存在正相关。

Hexbin Plot

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

名为“kind”且值为“hex”的附加参数会绘制六角形图。

Example

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

Kernel Density Estimation

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

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

Example

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

Output

xray

Seaborn - Visualizing Pairwise Relationship

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

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

Axes

在本节中,我们将学习什么是轴及其用法、参数等。

Usage

seaborn.pairplot(data,…)

Parameters

下表列出了轴的参数-

Sr.No.

Parameter & Description

1

data Dataframe

2

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

3

palette 用于映射色调变量的一组颜色

4

kind 用于非同一关系的绘图类型。 {‘scatter’,‘reg’}

5

diag_kind 用于对角线子图的绘图类型。 {‘hist’,‘kde’}

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

Example

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

Output

multi

我们可以观察到每个绘图中的差异。这些绘图呈矩阵格式,其中行名称表示 x 轴,列名称表示 y 轴。

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

Seaborn - Plotting Categorical Data

在我们先前的章节中,我们了解了用于分析所研究的连续变量的散点图、六角形图和核密度估计图。当所研究的变量是分类变量时,这些图不适用。

当一个或两个所研究的变量是分类变量时,我们将使用 striplot()、swarmplot() 等图。Seaborn 提供了这么做的接口。

Categorical Scatter Plots

在本节中,我们将了解分类散点图。

stripplot()

在所研究变量之一为分类变量时使用 stripplot()。它以分类顺序沿任意一个轴表示数据。

Example

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

Output

box

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

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

Example

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

Output

dots

现在,可以轻松地看到点的分布。

Swarmplot()

可以在 swarmplot() 函数中使用另一个选项作为“抖动”的替代。此函数将散点图的每个点定位在分类轴上,从而避免重叠点−

Example

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

Output

shades

Seaborn - Distribution of Observations

在我们上一章中处理过的类别散点绘图中,该方法在提供有关每个类别中值分布的信息方面变得有限。现在,更进一步,让我们看看在类别中执行比较时有什么可以帮助我们的。

Box Plots

Boxplot 是通过四分位数可视化数据分布的便捷方式。

盒状图通常具有从称为须盒子的盒子延伸出的垂直线。这些须反映了上四分位数和下四分位数之外的可变性,因此盒状图也被称为 box-and-whisker 图和 *盒须 *图。数据中的任何异常值都以单个点的形式绘制。

Example

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

Output

compressed

绘图上的点表示异常值。

Violin Plots

小提琴图是盒状图和核密度估计的结合。因此,这些绘图更容易分析和理解数据的分布。

利用名为的提示数据集以进一步了解小提琴图。此数据集包含有关顾客在餐厅中给出的提示的信息。

Example

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

Output

stages

箱线图的四分位数和须值从盒中显示。由于小提琴图使用 KDE,小提琴较宽的部分表示较高密度,而较窄区域表示较低密度。盒线图中的四分位间距和小提琴图每个类别中 KDE 中的较高密度部分位于同一区域。

上图显示了四天里 total_bill 的分布。但是,除此之外,如果我们想了解如何根据性别来分布,让我们在下面的示例中进行探索。

Example

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

Output

differnce

现在,我们可以清楚地看到男性和女性之间的消费行为。我们可以通过查看该图轻松地说,男性比女性多付账单。

并且,如果色调变量只有两个类别,我们可以通过在特定天内将每个小提琴分成两个部分而不是两个小提琴的方式来美化该图。小提琴的任一部分都表示色调变量中的每个类别。

Example

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

Output

multistages

Seaborn - Statistical Estimation

在大多数情况下,我们处理的是整个数据分布的估计。但是,当涉及到中心趋势估计时,我们需要一种特殊的方法来总结分布。均值和中位数是用于估计分布中心趋势的经常使用的方法。

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

Bar Plot

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

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

Example

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

Output

barplot

在上例中,我们可以看到每节车厢男性和女性的平均存活人数。从图中我们可以得知,存活下来的女性人数多于男性。在男性和女性中,一等舱的存活人数较多。

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

Example

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

Output

bargraph

图表显示,三等舱的乘客人数高于一等舱和二等舱。

Point Plots

点图与条形图具有相同的作用,但采用不同的样式。相对于整条,估计值由另一条轴上某个高度处的点表示。

Example

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

Output

z

Seaborn - Plotting Wide Form Data

总是建议使用“长形式”或“整齐”数据集。但有时当我们除了使用“宽格式”数据集外别无选择时,相同的功能也可应用于各种格式的“宽格式”数据,包括 Pandas 数据框或二维 NumPy 数组。应将这些对象直接传递到 data 参数中,并且必须将 x 和 y 变量指定为字符串

Example

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

Output

models

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

Example

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

Output

designs

对于 Python 世界中的许多开发者来说,使用 Seaborn 的主要优势在于它可以将 pandas 数据框对象作为参数。

Seaborn - Multi Panel Categorical Plots

分类数据可以使用两个图表进行可视化,您可以使用函数 pointplot() ,或更高级别的函数 factorplot()

Factorplot

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

Example

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

Output

l

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

Example

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

Output

sharp

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

What is Facet Grid?

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

让我们用一个例子来可视化上述定义

Example

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

Output

two types

使用面网格的优点是,我们可以将另一个变量输入到图中。上面的图基于名为“饮食”的第三变量,并使用“col”参数分为两个图。

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

Example

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

output

varioustypes

Seaborn - Linear Relationships

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

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

Functions to Draw Linear Regression Models

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

regplot vs lmplot

regplot

lmplot

以各种格式接受 x 和 y 变量,包括简单的 numpy 数组、pandas Series 对象或对 pandas DataFrame 中变量的引用

具有数据作为必需参数,并且必须将 x 和 y 变量指定为字符串。这种数据格式称为“长格式”数据

现在让我们绘制出这些图。

Example

在本例中使用相同的数据绘制回归图和 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()

Output

你可以看到两个图之间的尺寸差异。

zoomed magnifier

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

Example

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

Output

rugged

Fitting Different Kinds of Models

上面使用的简单线性回归模型非常容易拟合,但在大多数情况下,数据是非线性的,并且上述方法不能概括回归线。

让我们使用具有回归图的安斯科姆数据集 −

Example

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

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

让我们看另一个数据偏差较大的示例,其中显示了最佳拟合线不是很好。

Example

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

Output

halfs

此图显示数据点与回归线的较大偏差。可以使用 lmplot()regplot() 可视化此类非线性和高阶图。这些图可以拟合多项式回归模型来探索数据集中简单类型的非线性趋势 −

Example

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

Output

parabola

Seaborn - Facet Grid

探索中等维度数据的实用方法是,根据数据集的不同子集绘制同一图形的多个实例。

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

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

Plotting Small Multiples of Data Subsets

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

FacetGrid 最多可以绘制三个维度 - 行、列和色调。前两个与结果轴阵列有明显的对应关系;将色调变量视为深度轴上的第三维度,其中不同级别以不同颜色绘制。

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

这些变量应该是分类变量,并且每个变量级别的变量将用于沿着该轴的切面。

Example

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

Output

graphs

在上述示例中,我们刚刚初始化了 facetgrid 对象,它不会绘制任何内容。

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

Example

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

Output

differentiation

由于 col 参数,绘图的数量为多个。我们在之前的章节中讨论过 col 参数。

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

Example

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

Output

ratio

Seaborn - Pair Grid

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

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

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

Example

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

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

Example

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

Output

histogram dots

我们可以使用另一个分类变量自定义这些绘图的颜色。例如,鸢尾花数据集对三种不同鸢尾花物种中的每一种都有四项测量,因此你可以看出它们之间的差异。

Example

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

Output

colored

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

Example

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

Output

various plots