seaborn简介
!pip install seaborn
# Import seaborn
import seaborn as sns
# Apply the default theme
sns.set_theme()
# Load an example dataset
tips = sns.load_dataset("tips")
print(tips.head())
# Create a visualization
sns.relplot(
data=tips,
x="total_bill", y="tip", col="time",
hue="smoker", style="smoker", size="size",
)
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 库进行数据可视化。让我们逐步解释:
import seaborn as sns
: 导入 Seaborn 库,并将其命名为sns
,以便在后续代码中使用。sns.set_theme()
: 应用 Seaborn 库的默认主题设置。这可以改变图形的外观,使其更具可读性和美观性。tips = sns.load_dataset("tips")
: 从 Seaborn 提供的示例数据集中加载名为 “tips” 的数据集。这个数据集包含有关餐厅小费的信息,包括总账单金额(“total_bill”)、小费金额(“tip”)、用餐时间(“time”)、是否吸烟(“smoker”)以及用餐人数(“size”)等。print(tips.head())
: 打印数据集的前几行,以便查看数据的结构和内容。sns.relplot(...)
: 创建一个关系图。具体来说:
data=tips
: 指定要使用的数据集,这里是刚刚加载的 “tips” 数据集。x="total_bill"
,y="tip"
: 指定在 x 轴和 y 轴上绘制的变量分别为 “total_bill”(总账单金额)和 “tip”(小费金额)。col="time"
: 将图形分成不同的列,每列表示不同的用餐时间。hue="smoker"
: 根据是否吸烟的信息对数据进行颜色编码。不同吸烟者状态的数据点将有不同的颜色。style="smoker"
: 根据是否吸烟的信息为数据点添加不同的样式。这可能是不同的标记或线条风格。size="size"
: 根据用餐人数的信息调整数据点的大小。这样,代码生成了一个分面关系图,显示了总账单金额和小费金额之间的关系,并根据吸烟状态、用餐时间和用餐人数对数据进行了编码,使得图形更具信息量。每个分面表示一个用餐时间,不同的颜色、样式和大小反映了数据中的其他信息。
用于统计图形的高级API
dots = sns.load_dataset("dots")
print(dots.head())
sns.relplot(
data=dots, kind="line",
x="time", y="firing_rate", col="align",
hue="choice", size="coherence", style="choice",
facet_kws=dict(sharex=False),
)
align choice time coherence firing_rate
0 dots T1 -80 0.0 33.189967
1 dots T1 -80 3.2 31.691726
2 dots T1 -80 6.4 34.279840
3 dots T1 -80 12.8 32.631874
4 dots T1 -80 25.6 35.060487
这段代码使用 Seaborn 库来生成一个关系图,具体来说:
dots = sns.load_dataset("dots")
: 从 Seaborn 提供的示例数据集中加载名为 “dots” 的数据集。这个数据集可能包含关于实验中神经元射频、时间、对齐、选择、一致性等方面的信息。print(dots.head())
: 打印数据集的前几行,以便查看数据的结构和内容。sns.relplot(...)
: 创建一个关系图。具体来说:
data=dots
: 指定要使用的数据集,这里是刚刚加载的 “dots” 数据集。kind="line"
: 指定要创建的图的类型,这里是线图。x="time"
,y="firing_rate"
: 指定在 x 轴和 y 轴上绘制的变量分别为 “time”(时间)和 “firing_rate”(射频)。col="align"
: 将图形分成不同的列,每列表示不同的对齐方式。hue="choice"
: 根据选择的信息对数据进行颜色编码。不同选择的数据线将以不同的颜色显示。size="coherence"
: 根据一致性的信息调整数据点的大小。style="choice"
: 根据选择的信息为数据线添加不同的样式。facet_kws=dict(sharex=False)
: 通过facet_kws
参数设置,将 x 轴在子图之间不共享。每个子图都有独立的 x 轴。这段代码生成了一个分面线图,其中每个分面(列)表示不同的对齐方式,而在每个分面内,线表示随时间变化的不同选择的射频。线的颜色、大小和样式可能基于数据集中 “choice” 和 “coherence” 列的值而有所不同。
sharex=False
确保每个子图都有自己的 x 轴。
统计性估计
fmri = sns.load_dataset("fmri")
print(fmri.head())
sns.relplot(
data=fmri, kind="line",
x="timepoint", y="signal", col="region",
hue="event", style="event",
)
subject timepoint event region signal
0 s13 18 stim parietal -0.017552
1 s5 14 stim parietal -0.080883
2 s12 18 stim parietal -0.081033
3 s11 18 stim parietal -0.046134
4 s10 18 stim parietal -0.037970
这段代码使用 Seaborn 库来生成一个关系图,针对的是名为 “fmri” 的数据集。以下是代码的解释:
fmri = sns.load_dataset("fmri")
: 从 Seaborn 提供的示例数据集中加载名为 “fmri” 的数据集。这个数据集可能包含有关功能性磁共振成像(functional magnetic resonance imaging,fMRI)的信息,包括时间点(“timepoint”)、信号强度(“signal”)、大脑区域(“region”)和事件(“event”)等。print(fmri.head())
: 打印数据集的前几行,以便查看数据的结构和内容。sns.relplot(...)
: 创建一个关系图。具体来说:
data=fmri
: 指定要使用的数据集,这里是刚刚加载的 “fmri” 数据集。kind="line"
: 指定要创建的图的类型,这里是线图。x="timepoint"
,y="signal"
: 指定在 x 轴和 y 轴上绘制的变量分别为 “timepoint”(时间点)和 “signal”(信号强度)。col="region"
: 将图形分成不同的列,每列表示不同的大脑区域。hue="event"
: 根据事件的信息对数据进行颜色编码。不同事件的数据线将以不同的颜色显示。style="event"
: 根据事件的信息为数据线添加不同的样式。这段代码生成了一个分面线图,其中每个分面(列)表示不同的大脑区域,而在每个分面内,线表示不同事件的信号强度随时间点的变化。线的颜色和样式基于数据集中 “event” 列的值而有所不同。
sns.lmplot(data=tips, x="total_bill", y="tip", col="time", hue="smoker")
这段代码使用 Seaborn 库的
lmplot
函数创建一个散点图矩阵,用于可视化 “tips” 数据集中总账单金额(“total_bill”)和小费金额(“tip”)之间的关系,同时考虑了用餐时间(“time”)和是否吸烟(“smoker”)的影响。
让我们逐步解释这段代码:
sns.lmplot(...)
: 调用 Seaborn 库的lmplot
函数,用于绘制散点图矩阵。
data=tips
: 指定要使用的数据集,这里是 “tips” 数据集。x="total_bill"
,y="tip"
: 指定在散点图中的 x 轴和 y 轴上绘制的变量分别为 “total_bill”(总账单金额)和 “tip”(小费金额)。col="time"
: 将图形分成不同的列,每列表示不同的用餐时间。hue="smoker"
: 根据是否吸烟的信息对数据进行颜色编码。不同吸烟者状态的散点将以不同的颜色显示。这段代码生成一个散点图矩阵,其中每个子图表示不同的用餐时间,散点的横坐标是总账单金额,纵坐标是小费金额。不同的吸烟者状态用不同颜色表示。每个子图中的散点图显示了总账单金额和小费金额之间的线性关系,并考虑了用餐时间和是否吸烟的影响。
分布表示
sns.displot(data=tips, x="total_bill", col="time", kde=True)
这段代码使用 Seaborn 库的
displot
函数创建了一个分布图矩阵,用于可视化 “tips” 数据集中总账单金额(“total_bill”)的分布情况,同时考虑了用餐时间(“time”)的影响。
以下是代码的逐步解释:
sns.displot(...)
: 调用 Seaborn 库的displot
函数,用于绘制分布图矩阵。
data=tips
: 指定要使用的数据集,这里是 “tips” 数据集。x="total_bill"
: 指定要在分布图中绘制的变量,这里是 “total_bill”(总账单金额)。col="time"
: 将图形分成不同的列,每列表示不同的用餐时间。kde=True
: 在每个子图上添加核密度估计图,显示总账单金额的概率密度分布。这段代码生成一个分布图矩阵,其中每个子图表示不同的用餐时间,显示了总账单金额的分布情况。核密度估计图提供了有关总账单金额概率密度的额外信息。这样的可视化可以帮助观察总账单金额在不同用餐时间的变化趋势。
sns.displot(data=tips, kind="ecdf", x="total_bill", col="time", hue="smoker", rug=True)
这段代码使用 Seaborn 库的
displot
函数创建了一个带有ECDF(经验累积分布函数)图的分布图矩阵,用于可视化 “tips” 数据集中总账单金额(“total_bill”)的经验分布情况,同时考虑了用餐时间(“time”)和是否吸烟(“smoker”)的影响。
以下是代码的逐步解释:
sns.displot(...)
: 调用 Seaborn 库的displot
函数,用于绘制分布图矩阵。
data=tips
: 指定要使用的数据集,这里是 “tips” 数据集。kind="ecdf"
: 指定要创建的图的类型为经验分布函数(ECDF)图。x="total_bill"
: 指定要在图中绘制的变量,这里是 “total_bill”(总账单金额)。col="time"
: 将图形分成不同的列,每列表示不同的用餐时间。hue="smoker"
: 根据是否吸烟的信息对数据进行颜色编码。不同吸烟者状态的 ECDF 图线将以不同的颜色显示。rug=True
: 在每个子图上添加数据点的刻度线,以强调数据分布的具体位置。这段代码生成一个带有 ECDF 图的分布图矩阵,其中每个子图表示不同的用餐时间,通过颜色区分了吸烟者和非吸烟者的 ECDF 图线。ECDF 图显示了总账单金额的经验分布情况,并且刻度线(rug)强调了实际数据点的位置。这种可视化方法有助于理解数据的分布形状以及吸烟者和非吸烟者在总账单金额上的差异。
分类数据图
sns.catplot(data=tips, kind="swarm", x="day", y="total_bill", hue="smoker")
这段代码使用 Seaborn 库的
catplot
函数创建了一个蜂群图(swarm plot),用于可视化 “tips” 数据集中每天总账单金额(“total_bill”)的分布情况,并根据是否吸烟(“smoker”)的信息进行颜色编码。
以下是代码的逐步解释:
sns.catplot(...)
: 调用 Seaborn 库的catplot
函数,用于创建分类图。
data=tips
: 指定要使用的数据集,这里是 “tips” 数据集。kind="swarm"
: 指定要创建的图的类型为蜂群图,其中每个数据点都显示为沿分类轴的单独点,以避免它们重叠。x="day"
,y="total_bill"
: 指定在图中使用的变量,其中 “day” 表示 x 轴(横坐标),“total_bill” 表示 y 轴(纵坐标)。hue="smoker"
: 根据是否吸烟的信息对数据进行颜色编码。不同吸烟者状态的数据点将以不同的颜色显示。这段代码生成了一个蜂群图,其中每个点代表一个数据点,横坐标是每天的"day",纵坐标是总账单金额"total_bill"。不同吸烟者状态的数据点以不同的颜色表示,避免它们在图中重叠。这种图形有助于观察每天总账单金额的分布趋势,以及吸烟者和非吸烟者之间的差异。
sns.catplot(data=tips, kind="violin", x="day", y="total_bill", hue="smoker", split=True)
这段代码使用 Seaborn 库的
catplot
函数创建了一个小提琴图(Violin Plot),用于可视化 “tips” 数据集中每天总账单金额(“total_bill”)的分布情况,同时考虑了吸烟者与非吸烟者的影响。
以下是代码的逐步解释:
sns.catplot(...)
: 调用 Seaborn 库的catplot
函数,用于创建分类图。
data=tips
: 指定要使用的数据集,这里是 “tips” 数据集。kind="violin"
: 指定要创建的图的类型为小提琴图,它展示了数据的分布情况,包括核密度估计和箱线图。x="day"
,y="total_bill"
: 指定在图中使用的变量,其中 “day” 表示 x 轴(横坐标),“total_bill” 表示 y 轴(纵坐标)。hue="smoker"
: 根据是否吸烟的信息对数据进行颜色编码。不同吸烟者状态的数据将以不同的颜色表示。split=True
: 在每个小提琴内部将数据分割为吸烟者和非吸烟者两部分,以更好地比较它们的分布。这段代码生成了一个小提琴图,其中每个小提琴表示一天的总账单金额的分布情况。小提琴的宽度表示在该值附近的密度,中间的粗线表示四分位数,而小提琴的两侧表示数据的分布。通过颜色编码,可以直观地比较吸烟者和非吸烟者在每天总账单金额上的分布情况。
split=True
的设置允许我们在小提琴内部看到吸烟者和非吸烟者的分布,方便比较它们的差异。
sns.catplot(data=tips, kind="bar", x="day", y="total_bill", hue="smoker")
(黑线表示置信区间)
这段代码使用 Seaborn 库的
catplot
函数创建了一个条形图(Bar Plot),用于可视化 “tips” 数据集中每天总账单金额(“total_bill”)的平均值,同时考虑了吸烟者和非吸烟者的影响。
以下是代码的逐步解释:
sns.catplot(...)
: 调用 Seaborn 库的catplot
函数,用于创建分类图。
data=tips
: 指定要使用的数据集,这里是 “tips” 数据集。kind="bar"
: 指定要创建的图的类型为条形图,显示不同类别的平均值。x="day"
,y="total_bill"
: 指定在图中使用的变量,其中 “day” 表示 x 轴(横坐标),“total_bill” 表示 y 轴(纵坐标)。hue="smoker"
: 根据是否吸烟的信息对数据进行颜色编码。不同吸烟者状态的数据将以不同的颜色表示。这段代码生成了一个条形图,其中每个条形表示一天的总账单金额的平均值。条形的高度表示平均值的大小,而颜色表示吸烟者和非吸烟者之间的差异。这种图形有助于直观地比较各天总账单金额的平均水平,并观察吸烟者和非吸烟者之间的差异。
复杂数据集上的多变量视图
penguins = sns.load_dataset("penguins")
sns.jointplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species")
这段代码使用 Seaborn 库的
jointplot
函数创建了一个联合图(Joint Plot),用于可视化 “penguins” 数据集中翅膀长度(“flipper_length_mm”)和喙长度(“bill_length_mm”)之间的关系,并根据物种(“species”)进行颜色编码。
以下是代码的逐步解释:
penguins = sns.load_dataset("penguins")
: 从 Seaborn 提供的示例数据集中加载名为 “penguins” 的数据集。该数据集包含有关企鹅的信息,包括翅膀长度、喙长度和物种等。sns.jointplot(...)
: 调用 Seaborn 库的jointplot
函数,用于创建联合图。
data=penguins
: 指定要使用的数据集,这里是刚刚加载的 “penguins” 数据集。x="flipper_length_mm"
,y="bill_length_mm"
: 指定在图中使用的变量,其中 “flipper_length_mm” 表示 x 轴(横坐标),“bill_length_mm” 表示 y 轴(纵坐标)。hue="species"
: 根据物种的信息对数据进行颜色编码。不同物种的数据点将以不同的颜色显示。这段代码生成了一个联合图,其中包括散点图、直方图和核密度估计。在散点图的基础上,通过颜色编码显示了不同物种的数据点,使我们可以观察到翅膀长度和喙长度之间的关系,同时了解它们在不同物种之间的分布情况。
sns.pairplot(data=penguins, hue="species")
这段代码使用 Seaborn 库的
pairplot
函数创建了一个成对图(Pair Plot),用于可视化 “penguins” 数据集中多个变量之间的关系,并根据物种(“species”)进行颜色编码。
以下是代码的逐步解释:
penguins = sns.load_dataset("penguins")
: 从 Seaborn 提供的示例数据集中加载名为 “penguins” 的数据集。该数据集包含有关企鹅的信息,包括翅膀长度、喙长度、体重和物种等。sns.pairplot(...)
: 调用 Seaborn 库的pairplot
函数,用于创建成对图。
data=penguins
: 指定要使用的数据集,这里是刚刚加载的 “penguins” 数据集。hue="species"
: 根据物种的信息对数据进行颜色编码。不同物种的数据点将以不同的颜色显示。这段代码生成了一个矩阵,其中对角线上是每个变量的直方图,而非对角线上是变量之间的散点图。通过颜色编码,我们可以看到不同物种的数据点在图中的分布,以及不同变量之间的关系。这种图形有助于直观地了解多个变量之间的相互关系,并观察它们在不同物种之间的差异。
构建数字的低级工具(应该用的很少,我暂时也没看明白)
g = sns.PairGrid(penguins, hue="species", corner=True)
g.map_lower(sns.kdeplot, hue=None, levels=5, color=".2")
g.map_lower(sns.scatterplot, marker="+")
g.map_diag(sns.histplot, element="step", linewidth=0, kde=True)
g.add_legend(frameon=True)
g.legend.set_bbox_to_anchor((.61, .6))
这段代码使用 Seaborn 库的
PairGrid
类创建了一个成对图(Pair Grid),并通过一系列的map_lower
、map_diag
等方法来定制图的元素和样式。该图用于可视化 “penguins” 数据集中多个变量之间的关系,同时根据物种(“species”)进行颜色编码。
以下是代码的逐步解释:
g = sns.PairGrid(penguins, hue="species", corner=True)
: 创建一个 Pair Grid 对象,指定数据集为 “penguins”,并通过hue="species"
指定根据物种进行颜色编码。设置corner=True
表示仅在左下角的一半创建图,上半部分是对称的。g.map_lower(sns.kdeplot, hue=None, levels=5, color=".2")
: 在左下角的一半,使用核密度估计绘制每对变量的等高线图。hue=None
表示不使用颜色编码,levels=5
指定等高线的级别,color=".2"
指定颜色为灰色。g.map_lower(sns.scatterplot, marker="+")
: 在左下角的一半,使用散点图绘制每对变量的散点图,散点用加号(“+”)表示。g.map_diag(sns.histplot, element="step", linewidth=0, kde=True)
: 对角线上的每个变量,使用直方图绘制分布。通过element="step"
设置直方图的元素为步态(step),linewidth=0
设置直方图的线宽为0,kde=True
表示同时绘制核密度估计。g.add_legend(frameon=True)
: 添加图例,并通过frameon=True
设置图例的框架可见。g.legend.set_bbox_to_anchor((.61, .6))
: 调整图例的位置,使其不覆盖图的内容。这段代码生成了一个定制的成对图,用于展示 “penguins” 数据集中多个变量之间的关系,并以物种为基础进行颜色编码。不同元素的组合(核密度估计、散点图、直方图等)提供了对数据分布和关系的多层次的了解。
有主见的默认设置和灵活的定制功能
sns.relplot(
data=penguins,
x="bill_length_mm", y="bill_depth_mm", hue="body_mass_g"
)
这段代码使用 Seaborn 库的
relplot
函数创建了一个关系图,用于可视化 “penguins” 数据集中喙长度(“bill_length_mm”)和喙深度(“bill_depth_mm”)之间的关系,同时根据体重(“body_mass_g”)进行颜色编码。
以下是代码的解释:
data=penguins
: 指定要使用的数据集为 “penguins” 数据集。x="bill_length_mm", y="bill_depth_mm"
: 指定在图中使用的变量,其中 “bill_length_mm” 表示 x 轴(横坐标),“bill_depth_mm” 表示 y 轴(纵坐标)。hue="body_mass_g"
: 根据体重信息对数据进行颜色编码。这表示不同体重的数据点将以不同的颜色显示。该关系图的目的是显示喙长度和喙深度之间的关系,并通过颜色编码显示体重的信息。每个点代表一个企鹅样本,横坐标是喙长度,纵坐标是喙深度。颜色越深表示体重越大。这样的可视化方法可以帮助观察这两个特征之间的趋势,并了解体重如何分布在这个关系中。
下面这个用的应该很少,我也没有弄得很清楚
sns.set_theme(style="ticks", font_scale=1.25)
g = sns.relplot(
data=penguins,
x="bill_length_mm", y="bill_depth_mm", hue="body_mass_g",
palette="crest", marker="x", s=100,
)
g.set_axis_labels("Bill length (mm)", "Bill depth (mm)", labelpad=10)
g.legend.set_title("Body mass (g)")
g.figure.set_size_inches(6.5, 4.5)
g.ax.margins(.15)
g.despine(trim=True)
这段代码通过设置 Seaborn 的主题、调整图的样式和大小,创建了一个关系图,用于可视化 “penguins” 数据集中喙长度(“bill_length_mm”)和喙深度(“bill_depth_mm”)之间的关系,同时根据体重(“body_mass_g”)进行颜色编码。
以下是代码的解释:
sns.set_theme(style="ticks", font_scale=1.25)
: 设置 Seaborn 主题为 “ticks”,这表示使用坐标轴上的刻度线,以及将字体大小放大1.25倍。g = sns.relplot(...)
: 创建关系图,使用了之前的代码,设置了 x、y 轴,颜色编码,调色板为 “crest”,标记样式为 “x”,标记大小为 100。g.set_axis_labels("Bill length (mm)", "Bill depth (mm)", labelpad=10)
: 设置横轴和纵轴的标签,并增加标签与轴之间的间距。g.legend.set_title("Body mass (g)")
: 设置图例的标题。g.figure.set_size_inches(6.5, 4.5)
: 设置图的大小为6.5x4.5英寸。g.ax.margins(.15)
: 调整坐标轴的边距,使得数据点不紧密排列。g.despine(trim=True)
: 去除图的上、右边框,使得图更加清晰。