天天看点

python seaborn_python绘图之美:seaborn统计数据可视化

Seaborn是一个基于matplotlib的Python数据可视化库。它提供了一个高级界面,用于绘制具有吸引力和信息丰富的统计图形。

Seaborn旨在使可视化成为探索和理解数据的核心部分。它的面向数据集的绘图函数对包含整个数据集的数据流和数组进行操作,并在内部执行必要的语义映射和统计聚合以生成信息图。

seaborn提供的功能包括:

  • 检查多个变量之间的关系
  • 支持使用分类变量来显示观察结果或汇总统计数据
  • 可视化单变量或双变量分布以及在数据子集之间进行比较
  • 不同类型因变量线性回归模型的自动估计与作图
  • 查看复杂数据集的总体结构
  • 构建多图组合的高级可视化
  • 通过几个内置主题实现对matplotlib图形样式的简洁控制
  • 工具选择调色板

散点图

# 导入seaborn库import seaborn as sns# 应用默认的seaborn主题、缩放和调色板sns.set()# 加载一个示例数据集tips = sns.load_dataset("tips")# 可视化sns.relplot(x="total_bill", y="tip", col="time",            hue="smoker", style="smoker", size="size",            data=tips)
           
python seaborn_python绘图之美:seaborn统计数据可视化

线图:适用于时间序列数据

dots = sns.load_dataset("dots")sns.relplot(x="time", y="firing_rate", col="align",            hue="choice", size="coherence", style="choice",            facet_kws=dict(sharex=False),            kind="line", legend="full", data=dots)
           
python seaborn_python绘图之美:seaborn统计数据可视化

统计估计和误差线注释

fmri = sns.load_dataset("fmri")sns.relplot(x="timepoint", y="signal", col="region",            hue="event", style="event",            kind="line", data=fmri)
           
python seaborn_python绘图之美:seaborn统计数据可视化

在估计统计值时,seaborn将使用bootstrapping来计算置信区间并绘制表示估计不确定性的误差线。seaborn统计不仅仅是描述性统计。例如,也可以使用lmplot()增强散点图以包含线性回归模型(及其不确定性):

sns.lmplot(x="total_bill", y="tip", col="time", hue="smoker",           data=tips)
           
python seaborn_python绘图之美:seaborn统计数据可视化

分组数据的可视化

标准的散点图和直线图显示数值变量之间的关系,但许多数据分析涉及分类变量。在seaborn中有几种专门的绘图类型,它们都经过了优化,用于可视化这类数据。

分组散点图

sns.catplot(x="day", y="total_bill", hue="smoker",            kind="swarm", data=tips)
           

分组小提琴图

sns.catplot(x="day", y="total_bill", hue="smoker",            kind="violin", split=True, data=tips)
           
python seaborn_python绘图之美:seaborn统计数据可视化

分组柱状图

sns.catplot(x="day", y="total_bill", hue="smoker",            kind="bar", data=tips)
           
python seaborn_python绘图之美:seaborn统计数据可视化

图形级和轴级的功能

这些工具是如何工作的?了解seaborn绘图函数之间的主要区别是很重要的。到目前为止显示的所有图都是使用“图形级”功能制作的。这些是为探索性分析而优化的,因为它们设置了包含图的matplotlib图,并使可视化很容易跨多个轴展开。他们也处理一些棘手的事情,比如把图例放在坐标轴之外。要做这些事情,他们使用一个FacetGrid。

每一种不同的图形级的图都结合了FacetGrid的一个特定的“轴级”功能。例如,散点图是使用scatterplot()函数绘制的,条形图是使用barplot()函数绘制的。这些函数被称为“轴级”,因为它们只绘制一个matplotlib轴,而不会影响图的其他部分。

图级函数需要控制它所在的图,而轴级函数可以组合成更复杂的matplotlib图

import matplotlib.pyplot as pltf, axes = plt.subplots(1, 2, sharey=True, figsize=(6, 4))sns.boxplot(x="day", y="tip", data=tips, ax=axes[0])sns.scatterplot(x="total_bill", y="tip", hue="day", data=tips, ax=axes[1])
           
python seaborn_python绘图之美:seaborn统计数据可视化

控制图形级函数的大小的工作方式与控制其他matplotlib图形的工作方式稍有不同。图形级函数不是设置整体图形大小,而是通过设置每个方面的大小参数。不是设置每个面的高度和宽度,而是控制高度和宽高比(宽高比)。这种参数化可以很容易地控制图形的大小,而不需要考虑它将具有多少行和列,尽管这可能会造成混淆:

sns.relplot(x="time", y="firing_rate", col="align",            hue="choice", size="coherence", style="choice",            height=4.5, aspect=2 / 3,            facet_kws=dict(sharex=False),            kind="line", legend="full", data=dots)
           
python seaborn_python绘图之美:seaborn统计数据可视化

判断一个函数是“图形级”还是“轴级”的方法是看它是否接受ax=参数。还可以根据输出类型来区分这两个类: 轴级函数返回matplotlib轴,而图级函数返回FacetGrid。

数据结构可视化

在seaborn中还有另外两种图形级函数,可用于对多个图进行可视化。它们都是面向于阐明数据集的结构。一个是jointplot(),专注于单一的关系:

iris = sns.load_dataset("iris")sns.jointplot(x="sepal_length", y="petal_length", data=iris)
           
python seaborn_python绘图之美:seaborn统计数据可视化

另一个是pairplot(),它具有更广阔的视图,显示所有成对关系和边缘分布,可选地以分类变量为条件:

sns.pairplot(data=iris, hue="species")
           
python seaborn_python绘图之美:seaborn统计数据可视化

在可视化表示方面,jointplot()和pairplot()都有一些不同的选项,它们都构建在允许更彻底地定制多图的类之上(分别是JointGrid和PairGrid)。

自定义图形样式

绘图函数只使用默认的绘图样式并添加信息标签,如果想创建一个自定义的样式需要额外的步骤。

第一种方法是使用可选的seaborn主题之一,使您的图具有不同的外观。设置不同的主题或调色板将使它对所有图生效:

sns.set(style="ticks", palette="muted")sns.relplot(x="total_bill", y="tip", col="time",            hue="smoker", style="smoker", size="size",            data=tips)
           
python seaborn_python绘图之美:seaborn统计数据可视化

对于特定于图形的定制,所有seaborn函数都接受一些可选参数,用于切换到非默认语义映射,例如不同的颜色。(正确使用颜色对于有效的数据可视化至关重要,而seaborn对定制调色板提供了广泛的支持)。

最后,当与底层的matplotlib函数(如scatterplot()和matplotlib.ax.ax.scatter())直接对应时,额外的关键字参数将被传递到matplotlib层:

sns.relplot(x="total_bill", y="tip", col="time",            hue="size", style="smoker", size="size",            palette="YlGnBu", markers=["D", "o"], sizes=(10, 125),            edgecolor=".2", linewidth=.5, alpha=.75,            data=tips)
           
python seaborn_python绘图之美:seaborn统计数据可视化

对于relplot()和其他图形级函数,这意味着存在一些间接层,因为relplot()将其exta关键字参数传递给底层的seaborn axis级函数,后者将其额外的关键字参数传递给底层的matplotlib函数。

可以通过传递给FacetGrid其他参数来完成图形级函数的一些定制,并且可以使用该对象上的方法来控制图形的许多其他属性。为了做更多的调整,可以访问绘制的matplotlib对象,这些对象存储为属性:

g = sns.catplot(x="total_bill", y="day", hue="time",                height=3.5, aspect=1.5,                kind="box", legend=False, data=tips);g.add_legend()g.set_axis_labels("Total bill ($)", "")g.set(xlim=(0, 60), yticklabels=["Thursday", "Friday", "Saturday", "Sunday"])g.despine(trim=True)g.fig.set_size_inches(6.5, 3.5)g.ax.set_xticks([5, 15, 25, 35, 45, 55], minor=True);plt.setp(g.ax.get_yticklabels(), rotation=30)
           
python seaborn_python绘图之美:seaborn统计数据可视化

参考:

https://seaborn.pydata.org/introduction.html