seaborn图像绘制
Seaborn是一个基于Matplotlib的Python数据可视化库,专注于提供一种高级界面用于绘制吸引人且信息丰富的统计图形。它是数据分析和统计建模的理想伴侣,特别是与Pandas这样的数据处理库结合使用时。Seaborn的特点和功能包括:
面向数据集的API:设计用于简化对多个变量间关系的探索,特别擅长处理分类数据。
统计图形:提供了多种图表类型,专为展示数据分布、关系、回归分析等统计特性而设计,比如散点图矩阵(pair plots)、联合分布图(jointplots)、箱线图(box plots)、热力图(heatmaps)、线性回归图(regression plots)等。
分类数据支持:Seaborn擅长处理分类数据,可以很容易地根据类别变量对数据进行分组和着色,使数据的结构和模式一目了然。
高度集成的绘图接口:通过简洁的函数调用和参数设置就能创建复杂的图表,减少了Matplotlib中可能需要的低级细节操作。
美观的默认样式:Seaborn提供了比Matplotlib更现代和吸引人的默认视觉样式,包括色彩主题和风格设置,使得图表无需过多调整即可直接用于演示或报告。
调色板和颜色管理:包含一系列精心设计的调色板,有助于数据模式的忠实展现,同时也允许用户自定义颜色方案。
多图网格构建:高级抽象功能帮助用户轻松创建复杂的多面板布局,适合展示数据的不同方面或进行比较分析。
与Pandas和Numpy的紧密集成:无缝处理这两种库的数据结构,使得数据导入、清洗到可视化的流程更加流畅。
灵活的定制:虽然提供了许多默认设置,但Seaborn也允许用户深入定制图表的各个方面,包括标签、图例、注释和样式。
通过Seaborn,数据科学家和分析师能够快速地从数据中提取见解,并以清晰、美观的方式呈现给受众。
文章:
官网:seaborn: statistical data visualization — seaborn 0.13.2 documentation (pydata.org)
官方教程:User guide and tutorial — seaborn 0.13.2 documentation (pydata.org)
安装
pip install seaborn
为了能够运行seaborn,请预先安装matplotlib:
pip install matplotlib
引入
为了正常使用seaborn
,我们在引入seaborn
的同时也要引入matplotlib
import seaborn as sns
import matplotlib.pyplot as plt
内置数据集
seaborn内置了非常多的数据集以供演示,通过get_dataset_names
函数以获取,如下:
sns.get_dataset_names() # 返回一个list
输出:
['anagrams',
'anscombe',
'attention',
'brain_networks',
'car_crashes',
'diamonds',
'dots',
'dowjones',
'exercise',
'flights',
'fmri',
'geyser',
'glue',
'healthexp',
'iris',
'mpg',
'penguins',
'planets',
'seaice',
'taxis',
'tips',
'titanic']
Seaborn 内置的一些常见数据集包括:
anscombe
:四个具有相同统计属性但明显不同的数据集。attention
:注意任务中的响应时间数据。brain_networks
:大脑网络连接数据。car_crashes
:美国各州车祸数据。diamonds
:钻石价格和属性数据。dots
:视觉注意力实验数据。exercise
:运动心率数据。flights
:航空乘客数据。gammas
:伽马射线强度数据。geyser
:Old Faithful 喷泉喷发数据。iris
:著名的鸢尾花数据集。mpg
:汽车每加仑英里数数据。planets
:系外行星发现数据。tips
:小费数据集。titanic
:泰坦尼克号乘客生存数据。
以tips
为例,我们可以使用load_dataset
函数去获取对应的数据集,例如:
tips = sns.load_dataset("tips") # 返回一个dataframe
我们查看前5行可以看到:
tips.head()
下面我们就用tips
数据集作为例子去学习seaborn
主题设置
Seaborn提供了多种内置主题和颜色调色板,可以通过设置来改变图形的外观。通过函数set_theme
去设置我们想要的主题即可,例如:
sns.set_theme(style="whitegrid", palette="pastel")
以下是各类参数的解释:
背景风格(style)
这个参数可以设置一个全局的主题风格,影响所有后续的图表。Seaborn提供了以下预设的背景风格:
"darkgrid"
:默认主题,深色背景和网格线。"whitegrid"
:白色背景和网格线。"dark"
:深色背景,无网格线。"white"
:白色背景,无网格线。"ticks"
:任何背景颜色,但有轴脊线和刻度线。
以whitegrid
为例:
sns.set_theme(style="whitegrid")
模板(context)
这个参数可以快速地调整图表的视觉呈现,就像ppt的模板。这样可以适应不同的展示场景,比如学术论文、笔记本演示、演讲或是海报展示。
以下是Seaborn中可用的context
选项:
"paper"
:适用于学术论文或印刷材料。此设置下的元素大小和比例经过优化,以便在印刷品中清晰显示,通常会使用较小的字体和标记。"notebook"
:默认的context
设置,适用于在Jupyter Notebook或类似环境中使用。它提供了适中的字体和标记大小,既不会太大也不会太小。"talk"
:专为演讲或报告设计。在较大的显示屏上,特别是在向观众展示时,此上下文将放大字体和标记,确保图表信息清晰可见。"poster"
:为制作海报或大型展示而设计。在这种情况下,图表的所有元素都会显著增大,以确保在远距离也能被轻松阅读。
以paper
为例:
sns.set_theme(context="paper")
调色板(palette)
这个参数可以设定默认的绘图颜色方案,可以选择以下预定义的调色板名称:
"deep"
:一组饱和度较高的颜色。"muted"
:一组较为柔和的颜色。"pastel"
:一组淡色调的颜色。"bright"
:一组明亮鲜艳的颜色。"dark"
:一组较暗的颜色。"colorblind"
:一组易于区分且对色盲友好的颜色。
以pastel
为例:
sns.set_theme(palette="pastel")
这个参数也可以直接传递一个由颜色组成的列表,颜色可以是英文名称、十六进制字符串、RGB 或 RGBA 元组。例如:
my_palette = ["#FF0000", "#00FF00", "#0000FF"]
sns.set_theme(palette=my_palette)
字体与字体比例(font、font_scale)
对于主题中的字体,可以使用font
这个参数我们想要的字体,并用font_scale
去指定字体的大小比例:
sns.set_theme(font="sans-serif", font_scale=1.5)
基本绘图
下面我们就用tips
数据集作为例子去学习seaborn如何进行绘图,详情看上面的数据集的这一章
seaborn的基本绘图中,data传入的数据基本都是pandas的dataframe,后面x和y指定的都是某一列的列名,以散点图为例:
sns.scatterplot(x="total_bill", y="tip", data=tips)
这里的x使用的是total_bill
这一列,y使用的是tip
这一列
x和y也可以传入list、pandas的序列或者numpy的ndarray:
# x = [1, 2, 3, 4, 5]
# x = pd.Series([1, 2, 3, 4, 5])
x = np.array([1, 2, 3, 4, 5])
# y = [2, 4, 6, 8, 10]
# y = pd.Series([2, 4, 6, 8, 10])
y = np.array([2, 4, 6, 8, 10])
sns.scatterplot(x=x, y=y)
plt.show()
也就是说,x和y输入的更加灵活,既可以指定dataframe的列名,也可以传入数据。下面的例子中,会直接使用列名进行图片的绘制
seaborn在绘制完图片后,都需要使用matplotlib进行展示,下面就不过多赘述
散点图
散点图用于显示两个连续变量之间的关系。seaborn中散点图的写法如下:
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.show()
在绘制散点图时,scatterplot
提供了内置的参数可以用来快速更改其样式:
hue
:字段名或数组样式的数据,用于对点进行分组并为不同组分配不同的颜色。例如,你可以使用分类变量(如性别)来给散点图中的点着色。size
:字段名或数组样式的数据,用于根据数值变量的大小来调整点的大小。style
:字段名或数组样式的数据,用于根据分类变量来改变点的标记样式。palette
:颜色调色板的名称、字典或列表,用于为 hue 变量的不同水平设置颜色。sizes
:一个元组,定义了 size 变量映射到实际点大小的范围。markers
:如果 True,则使用默认的标记;如果是一个字典,则提供每个 style 类别的标记。
折线图
折线图适合展示随时间变化的趋势或者两个连续变量之间的关系。seaborn中折线图的写法如下:
sns.lineplot(x="day", y="total_bill", data=tips)
plt.show()
在绘制折线图时,lineplot
提供了内置的参数可以用来快速更改其样式:
hue
: 字段名或数组样式的变量,用于对线条进行分组并为不同组分配不同的颜色。这可以是分类变量,如产品类别或实验条件。size
: 字段名或数组样式的变量,用于根据数值变量的大小调整线条的宽度或标记的大小。style
: 字段名或数组样式的变量,用于根据分类变量改变线条的样式,如虚线、实线等。
palette
: 调色板的名称、字典或列表,用于为hue
变量的不同水平设置颜色。linewidth
: 线条的宽度。markers
: 是否在数据点上添加标记,可以是布尔值或标记的样式。dashes
: 是否绘制虚线或实线。如果是False
,所有线条都是实线。err_style
: 错误带的样式,可以是 'band'(默认),'bars' 或None
。units
: 字段名或数组样式的变量,用于识别不同的观测单位,当数据是重复测量时有用。estimator
: 使用哪个统计量估计 y 值,如 'mean'(默认)、'median' 或自定义函数。ci
: 置信区间的大小,可以是数值或None
(不显示置信区间)。n_boot
: 计算置信区间时使用的引导采样次数。sort
: 是否在绘图前对数据按 x 值排序。legend
: 图例的显示方式,可以是 'full'、'brief' 或False
。ax
:matplotlib.axes.Axes
对象,如果提供,则在此 Axes 上绘制图形。
条形图
条形图适合展示分类数据的汇总统计。seaborn中条形图的写法如下:
sns.barplot(x="day", y="total_bill", data=tips)
plt.show()
在绘制条形图时,barplot
提供了内置的参数可以用来快速更改其样式:
hue
: 这个参数用于进一步细分数据,通常用于表示第三个分类变量。当使用 hue 参数时,条形图会根据这个变量的不同类别分为多个颜色不同的部分。data
:这是一个 Pandas DataFrame 或类似的结构,包含了要绘制成条形图的数据。order
,hue_order
: 这两个参数允许你自定义 x 轴上的类别顺序和 hue 变量的顺序。estimator
: 默认情况下,sns.barplot 绘制的是均值。但是,你可以使用 estimator 参数来改变所计算的统计量,例如可以设置为 np.sum 来绘制总和。ci
: 这个参数控制是否以及如何显示置信区间。可以设置为一个百分比,或者 None 来禁用置信区间的显示。n_boot
: 如果置信区间被启用,这个参数控制了用于计算置信区间的自助法(bootstrap)的重复次数。orient
: 可以是'v'
或'h'
,用于指定条形图的垂直或水平方向。color
,palette
: 分别用于设置条形图的颜色或颜色调色板。saturation
: 控制不同 hue 分类的颜色饱和度。errcolor
,errwidth
,capsize
: 这些参数用于控制置信区间误差线的颜色、宽度和帽宽。
直方图
直方图适合展示单个变量的分布。seaborn中直方图的写法如下:
sns.histplot(x="total_bill", data=tips)
plt.show()
在绘制直方图时,histplot
提供了内置的参数可以用来快速更改其样式:
weights
:可选参数,一个与 x 相同长度的数组,用于对每个样本点进行加权。bins
:可以是整数,表示直方图的箱数;也可以是数组,表示箱的边界。binwidth
:用于设置箱的固定宽度,可以替代 bins。discrete
:当数据是离散的时候,可以设置此参数为 True 来得到更准确的直方图。kde
:布尔值,如果为 True,则在直方图上绘制核密度估计曲线。log_scale
:如果为 True,则使用对数刻度轴。stat
:表示统计量,可以是"count"
,"frequency"
,"density"
, 或"probability"
。默认为"count"
,表示每个箱中的样本数。cumulative
:布尔值,如果为 True,则绘制累积直方图。common_norm
:如果为 True,所有 KDEs 都将规范化到相同的总区域。如果为 False,则每个 KDE 都将独立规范化。multiple
:当数据包含多个变量时,用于确定如何处理重叠的直方图。可以是"layer"
,"stack"
, 或"fill"
。element
:用于绘制直方图的元素类型。可以是"bars"
,"step"
,或"poly"
。fill
:如果为 True,则填充直方图的区域。shrink
:缩放因子,用于缩小直方图的宽度。
箱形图
箱形图又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。
箱形图最大的优点就是不受异常值的影响,能够准确稳定地描绘出数据的离散分布情况,同时也利于数据的清洗。
seaborn中箱形图的写法如下:
sns.boxplot(x="day", y="total_bill", data=tips)
plt.show()
在绘制箱形图时,boxplot
提供了内置的参数可以用来快速更改其样式:
hue
:用于对数据进行分组,基于另一个分类变量。例如,如果你有性别数据,你可以将其作为 hue 参数,从而为每个性别类别创建单独的箱线图。order
,hue_order
:定义 x 轴上的分类变量顺序和 hue 分类变量的顺序。这些参数允许你控制箱线图在绘图中的显示顺序。orient
:控制箱线图的朝向,可以是'v'
(垂直,默认)或'h'
(水平)。color
,palette
:color用于设置单一颜色,而palette可以是一个色板名称、字典或列表,用于给不同类别着色。saturation
:控制颜色饱和度,介于 0 到 1 之间。width
:控制箱体的宽度。fliersize
:控制异常值(离群点)的标记大小。linewidth
:控制箱线图线条的宽度。notch
:如果设为 True,则会在箱体中添加一个凹口来表示置信区间。whis
:控制须的长度,通常是一个浮点数,表示 IQR 的倍数。例如,whis=1.5 会显示 IQR 之外 1.5 倍 IQR 的数据点。bootstrap
:如果提供,将使用 bootstrap 方法来估计置信区间,而不是假设正态分布。
小提琴图
小提琴图展示数据分布及其概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。
中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。
seaborn中小提琴图的写法如下:
sns.violinplot(x="day", y="total_bill", data=tips)
plt.show()
在绘制小提琴图时,violinplot
提供了内置的参数可以用来快速更改其样式:
hue
:一个分类变量,用于进一步细分数据。例如,如果你想根据不同的类别绘制不同的小提琴图,可以使用此参数。split
:当使用 hue 参数时,如果设为 True,将在每个分类水平上创建两个并排的小提琴图,而不是堆叠在一起。scale
:控制小提琴的缩放方式。可以是'area'
(所有小提琴的面积相同,这是默认值)、'count'
(小提琴的宽度与每个分类的观测数量成比例)、或'width'
(所有小提琴的宽度相同)。scale_hue
:如果为 True,即使 scale 设置为'area'
或'width'
,也会根据 hue 类别调整小提琴的宽度。bw
:核密度估计的带宽调整因子。较小的值会产生更尖锐的峰,较大的值会使曲线更平滑。cut
:控制绘制密度的尾部部分。cut 参数定义了超出数据范围的尾部绘制多少个带宽单位。默认值为 2。inner
:控制是否在小提琴内绘制箱线图或四分位数等额外细节。可以是'box'
、'quartile'
、'point'
、'stick'
或None
。split
:如果为 True 并且使用了 hue 参数,则在同一分类级别下创建两个并排的小提琴图,而不是堆叠在一起。dodge
:当使用 hue 参数时,如果为 True,小提琴图将被稍微错开以避免重叠。orient
:小提琴图的方向,可以是'v'
(垂直)或'h'
(水平)。linewidth
:控制轮廓线的宽度。
热力图
热力图,又名相关系数图。根据热力图中不同方块颜色对应的相关系数的大小,可以判断出变量之间相关性的大小
该相关系数只能度量出变量之间的线性相关关系;也就是说,相关系数越高,则变量间的线性相关程度越高。对于相关系数小的两个变量,只能说明变量间的线性相关程度弱,但不能说明变量之间不存在其它的相关关系,如曲线关系等
seaborn中热力图的写法如下:
corr = tips.corr()
sns.heatmap(corr, annot=True)
plt.show()
在绘制热力图时,heatmap
提供了内置的参数可以用来快速更改其样式:
annot
:布尔值或数组。如果设置为 True,则在每个单元格中显示数值。如果提供一个数组,它应该与 data 具有相同的形状,并且其值将在单元格中显示。fmt
:一个字符串,用于控制显示在单元格中的数值的格式。例如,".1f"
表示浮点数,保留一位小数。linewidths
:浮点数,用于指定单元格边界线的宽度。linecolor
:字符串,用于指定单元格边界线的颜色。cmap
:字符串或颜色映射对象,用于定义颜色渐变。例如,"coolwarm"
、"Blues"
或"YlGnBu"
。center
:浮点数,用于定义色谱的中心点,这对于对称的色谱特别有用。vmin
,vmax
:浮点数,分别定义色谱的最小值和最大值。这可以用来确保不同热力图之间的颜色比较是一致的。square
:布尔值,如果为 True,则每个单元格会被绘制为正方形,这对于方阵特别有用。xticklabels
,yticklabels
:可以是布尔值、整数或列表,用于定义x轴和y轴的标签。如果数据是 DataFrame,这些通常会被自动推断。cbar
:布尔值,如果为 True,则在热力图旁边显示颜色条。cbar_kws
:字典,包含任何要传递给颜色条的参数。robust
:布尔值,如果为 True,则在计算色谱范围时会忽略离群点。