- Seaborn 教程
- Seaborn - 首页
- Seaborn - 简介
- Seaborn - 环境设置
- 导入数据集和库
- Seaborn - 图形美观
- Seaborn - 调色板
- Seaborn - 直方图
- Seaborn - 核密度估计
- 可视化成对关系
- Seaborn - 绘制分类数据
- 观测值的分布
- Seaborn - 统计估计
- Seaborn - 绘制宽格式数据
- 多面板分类图
- Seaborn - 线性关系
- Seaborn - Facet Grid
- Seaborn - Pair Grid
- 函数参考
- Seaborn - 函数参考
- Seaborn 有用资源
- Seaborn - 快速指南
- Seaborn - 有用资源
- Seaborn - 讨论
Seaborn - 快速指南
Seaborn - 简介
在分析的世界中,获得洞察力的最佳方法是将数据可视化。数据可以通过将其表示为易于理解、探索和掌握的图表来可视化。此类数据有助于吸引关键要素的注意力。
为了使用 Python 分析一组数据,我们使用了 Matplotlib,这是一个广泛实施的二维绘图库。同样,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
对于 Windows、Linux 和 Mac 使用 Anaconda
Anaconda(来自 https://anaconda.net.cn/)是 SciPy 栈的免费 Python 发行版。它也适用于 Linux 和 Mac。
也可以使用 conda 安装已发布的版本 -
conda install seaborn
要直接从 github 安装 Seaborn 的开发版本
https://github.com/mwaskom/seaborn"
依赖项
考虑以下 Seaborn 的依赖项 -
- Python 2.7 或 3.4+
- numpy
- scipy
- pandas
- matplotlib
Seaborn - 导入数据集和库
在本章中,我们将讨论如何导入数据集和库。让我们从了解如何导入库开始。
导入库
让我们从导入 Pandas 开始,这是一个用于管理关系(表格格式)数据集的优秀库。在处理 DataFrame 时,Seaborn 非常方便,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']
DataFrame 通过可以轻松查看数据的方式以矩形网格的形式存储数据。矩形网格的每一行包含一个实例的值,网格的每一列都是一个向量,它保存特定变量的数据。这意味着 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()。使用此函数,您可以设置绘图的主题。根据最新更新的版本,以下是可用的五个主题。
- Darkgrid
- Whitegrid
- Dark
- White
- Ticks
让我们尝试从上述列表中应用一个主题。绘图的默认主题将是 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() 函数控制绘图的比例。我们有四个预设上下文模板,基于相对大小,上下文命名如下
- Paper
- Notebook
- Talk
- Poster
默认情况下,上下文设置为笔记本;并在上面的绘图中使用。
示例
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 - 调色板
颜色在可视化中比任何其他方面都起着重要的作用。如果使用得当,颜色会为绘图增加更多价值。调色板是指画家整理和混合颜料的平面。
构建调色板
Seaborn 提供了一个名为 color_palette() 的函数,可用于为绘图着色并为其添加更多美学价值。
用法
seaborn.color_palette(palette = None, n_colors = None, desat = None)
参数
下表列出了构建调色板的参数 -
序号 | 调色板和描述 |
---|---|
1 | n_colors 调色板中的颜色数量。如果为 None,则默认值将取决于调色板的指定方式。默认情况下,n_colors 的值为 6 种颜色。 |
2 | desat 使每种颜色去饱和的比例。 |
返回值
返回值是指 RGB 元组列表。以下是现成的 Seaborn 调色板 -
- Deep
- Muted
- Bright
- Pastel
- Dark
- Colorblind
除此之外,还可以生成新的调色板
在不知道数据特征的情况下,很难确定应该为给定数据集使用哪种调色板。意识到这一点,我们将对使用 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()
注意 -我们需要像上面示例中的“Greens”一样将“s”附加到参数上。
发散颜色调色板
发散调色板使用两种不同的颜色。每种颜色代表从一个共同点向任一方向变化的值的变化。
假设绘制从 -1 到 1 的数据。从 -1 到 0 的值采用一种颜色,从 0 到 +1 的值采用另一种颜色。
默认情况下,值以零为中心。可以通过传递一个值来使用参数center控制它。
示例
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 | data Series、一维数组或列表 |
2 | bins 直方图bin的规范 |
3 | hist 布尔值 |
4 | kde 布尔值 |
这些是需要了解的基本且重要的参数。
Seaborn - 直方图
直方图通过沿数据范围形成bin,然后绘制条形图来显示落入每个bin中的观测值的数量,从而表示数据分布。
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()
输出
绘制双变量分布
双变量分布用于确定两个变量之间的关系。这主要处理两个变量之间的关系以及一个变量相对于另一个变量的行为方式。
在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_length和petal_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()
输出
Seaborn - 可视化成对关系
实时研究中的数据集包含许多变量。在这种情况下,应分析每个变量之间的关系。绘制(n,2)组合的双变量分布将是一个非常复杂且耗时的过程。
要绘制数据集中多个成对的双变量分布,可以使用pairplot()函数。这将DataFrame中变量的(n,2)组合的关系显示为矩阵图,对角线图是单变量图。
轴
在本节中,我们将学习什么是轴、它们的用法、参数等。
用法
seaborn.pairplot(data,…)
参数
下表列出了轴的参数 -
序号 | 参数 & 描述 |
---|---|
1 | data 数据框 |
2 | hue 数据中用于将绘图方面映射到不同颜色的变量。 |
3 | palette 用于映射hue变量的颜色集 |
4 | kind 非恒等关系的绘图类型。{‘scatter’, ‘reg’} |
5 | diag_kind 对角线子图的绘图类型。{‘hist’, ‘kde’} |
除了data之外,所有其他参数都是可选的。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 - 绘制分类数据
在我们之前的章节中,我们学习了散点图、六边形图和kde图,这些图用于分析正在研究的连续变量。当正在研究的变量是分类变量时,这些图不适用。
当正在研究的一个或两个变量是分类变量时,我们使用stripplot()、swarmplot()等图。Seaborn提供了这样的接口。
分类散点图
在本节中,我们将学习有关分类散点图的知识。
stripplot()
当正在研究的变量之一是分类变量时,使用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”参数来处理这种情况。
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()
输出
现在,可以轻松地看到点的分布。
Swarmplot()
另一种可以作为“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()
输出
图上的点表示异常值。
小提琴图
小提琴图是箱线图与核密度估计的组合。因此,这些图更容易分析和理解数据的分布。
让我们使用名为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()
输出
现在我们可以清楚地看到男性和女性之间的消费行为。通过查看图表,我们可以很容易地说,男性比女性消费更多。
并且,如果hue变量只有两个类别,我们可以通过将每个小提琴分成两个而不是在特定日期有两个小提琴来美化图表。小提琴的任一部分都指hue变量中的每个类别。
示例
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()显示了分类变量和连续变量之间的关系。数据以矩形条表示,其中条的长度表示该类别中数据的比例。
条形图表示中心趋势的估计。让我们使用“titanic”数据集来学习条形图。
示例
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()
输出
图显示,三等舱的乘客数量高于一、二等舱。
点图
点图与条形图的作用相同,但样式不同。它不是使用完整的条形,而是用某个高度上的点来表示估计值在另一条轴上的值。
示例
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()
输出
Seaborn - 绘制宽格式数据
始终建议使用“长格式”或“整洁”数据集。但在某些情况下,我们别无选择,只能使用“宽格式”数据集,同样的函数也可以应用于各种格式的“宽格式”数据,包括 Pandas DataFrame 或二维 NumPy 数组。这些对象应该直接传递给 data 参数,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()
输出
Seaborn 对许多 Python 开发人员的主要优势在于它可以将 pandas DataFrame 对象作为参数。
Seaborn - 多面板分类图
分类数据可以使用两种图进行可视化,可以使用pointplot()函数,或使用更高级的factorplot()函数。
Factorplot
Factorplot 在 FacetGrid 上绘制分类图。使用“kind”参数,我们可以选择箱线图、小提琴图、条形图和散点图等图。FacetGrid 默认使用 pointplot。
示例
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()
输出
我们可以使用不同的图来可视化相同的数据,方法是使用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()
输出
在 factorplot 中,数据绘制在 facet 网格上。
什么是 Facet 网格?
Facet 网格通过划分变量形成由行和列定义的面板矩阵。由于面板的存在,单个图看起来像多个图。它对于分析两个离散变量的所有组合非常有用。
让我们用一个例子来可视化上述定义。
示例
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 的优势在于,我们可以将另一个变量输入到图中。上面的图根据名为“diet”的第三个变量(使用“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
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 - Facet Grid
探索中等维数据的一种有效方法是,在数据集的不同子集上绘制同一图的多个实例。
这种技术通常称为“格子”或“网格”绘图,它与“小倍数”的概念有关。
要使用这些功能,您的数据必须位于 Pandas DataFrame 中。
绘制数据子集的小倍数
在上一章中,我们已经看到了 FacetGrid 示例,其中 FacetGrid 类有助于可视化一个变量的分布以及使用多个面板分别在数据集的子集中多个变量之间的关系。
FacetGrid 可以绘制最多三个维度 - 行、列和色调。前两个与生成的轴数组有明显的对应关系;将色调变量视为沿深度轴的第三个维度,其中不同级别以不同的颜色绘制。
FacetGrid对象将 DataFrame 作为输入,以及将构成网格的行、列或色调维度的变量名称。
变量应该是分类变量,并且变量每个级别的的数据将用于该轴上的一个面。
示例
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 - Pair Grid
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()
输出
我们可以使用另一个分类变量自定义这些图的颜色。例如,iris 数据集对三种不同的鸢尾花物种的每一种都进行了四次测量,因此您可以看到它们之间的差异。
示例
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()