Python----数据可视化(Seaborn合集:介绍,应用,绘图,使用FacetGrid绘图)
一、Seaborn的介绍
Seaborn 是一个基于 matplotlib 的 Python 库,对其进行了高级 API 的封装,使得作图更为方便和吸引人。尽管在大多数情况下,使用 Seaborn 就能够创建出美观的图表,但 matplotlib 提供了更高的灵活性和定制化的能力。因此,Seaborn 应该被视为 matplotlib 的补充,而非替代品。
官方地址:
http://seaborn.pydata.org/seaborn: statistical data visualization — seaborn 0.13.2 documentation
安装:
pip install seaborn
二、应用
2.1、seaborn简单使用
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
plt.plot([1,5,10],[1,3,5])
plt.show()
2.2、内置数据集
load_dataset()默认提供了数据集,方便测试图表的使用
"""从在线仓库加载示例数据集(需要互联网连接)。
此函数提供对少量示例数据集的快速访问,这些数据集对文档编写 Seaborn 或生成可重复的示例以进行错误报告非常有用。在正常使用中并不是必需的。
请注意,一些数据集会应用少量预处理,以确定分类变量的正确顺序。
使用 :func:`get_dataset_names` 查看可用数据集的列表。
参数
----------
name : str
数据集名称(``{name}.csv`` 位于
https://github.com/mwaskom/seaborn-data)。
cache : boolean, optional
如果为 True,先尝试从本地缓存加载数据,如果需要下载则保存到缓存。
data_home : string, optional
用于缓存数据的目录;请参见 :func:`get_data_home`。
kws : 键值对,可选
额外的关键字参数将传递给 :func:`pandas.read_csv`。
返回
-------
df : :class:`pandas.DataFrame`
表格数据,可能会应用了一些预处理。
"""
import seaborn as sns
data = sns.load_dataset('tips')
print(data)
注意:
如果网络不好, 在
mwaskom/seaborn-data: Data repository for seaborn examples
可下载完整数据集
2.3、风格设置
除了各种绘图方式外,图形的美观程度可能是我们最关心的了。将它放到第一部分,因为风格设置是一些通用性的操作,对于各种绘图方法都适用。
Seaborn 支持的风格有5种 | |
darkgrid | 黑背景-白格 |
whitegrid | 白背景-白格 |
dark | 黑背景 |
white | 白背景 |
ticks |
设置风格的方法:
set(style='')
set_style(value) 统一设置
axes_style(value) 单一设置
2.3.1、whitegrid
import seaborn as sns
from matplotlib import pyplot as plt
import pandas as pd
# data = sns.load_dataset('tips')
data=pd.read_csv('tips.csv')
sns.set_style('whitegrid')
sns.barplot(x='sex', y='size', data=data)
2.3.2、white
import seaborn as sns
from matplotlib import pyplot as plt
import pandas as pd
# data = sns.load_dataset('tips')
data=pd.read_csv('tips.csv')
sns.set_style('white')
sns.barplot(x='sex', y='size', data=data)
2.3.3、darkgrid
import seaborn as sns
from matplotlib import pyplot as plt
import pandas as pd
# data = sns.load_dataset('tips')
data=pd.read_csv('tips.csv')
sns.set_style('darkgrid')
sns.barplot(x='sex', y='size', data=data)
2.3.4、dark
import seaborn as sns
from matplotlib import pyplot as plt
import pandas as pd
# data = sns.load_dataset('tips')
data=pd.read_csv('tips.csv')
sns.set_style('dark')
sns.barplot(x='sex', y='size', data=data)
2.3.5、 ticks
import seaborn as sns
from matplotlib import pyplot as plt
import pandas as pd
# data = sns.load_dataset('tips')
data=pd.read_csv('tips.csv')
sns.set_style('ticks')
sns.barplot(x='sex', y='size', data=data)
2.3.6、第二种方法
sns.set(style='whitegrid')
sns.barplot(x='sex', y='size', data=data)
2.3.7、第三种方法
with sns.axes_style('darkgrid'):
sns.lineplot(x='total_bill', y='tip', data=data)
2.4、调色板
颜色比图形样式的其他方面更重要,因为如果有效使用颜色可以更凸显示数据的结果与重要
Seaborn可以轻松选择和使用适合您正在使用的数据类型的调色板以及您可视化的目标
支持的方法 | |
color_palette() | 能传入任何Matplotlib所支持的颜色 |
color_palette() | 不写参数则,默认颜色 deep, muted, pastel, bright, dark, colorblind |
color_palette() | ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"] |
light_palette() | |
dark_palette() | |
set_palette() | 设置所有图的颜色 |
current_palette = sns.color_palette()
sns.palplot(current_palette)
current_palette = sns.color_palette('dark')
sns.palplot(current_palette) #10个色块
sns.palplot(sns.color_palette('hls',8))#8个颜色,色度比较亮
sns.palplot(sns.color_palette('Blues'))
sns.palplot(sns.color_palette('Greens_r'))
sns.palplot(sns.light_palette('green'))
sns.palplot(sns.dark_palette('purple'))
xkcd_rgb 颜色
从xkcd_rgb这产生了一组颜色https://xkcd.com/color/rgb/,可以使用xkcd_rgb在seaborn中引用它们
sns.xkcd_palette(['dark pink','algae','spring green','greyish blue'])
三、绘图
常见方法
barplot方法 单独绘制条形图
catplot方法 可以条形图、散点图、盒图、小提亲图、等
countplot方法 统计数量
3.1、柱状图
seaborn.barplot(data=None, x=None, y=None, hue=None, color=None, palette=None)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
color | 用于变量的不同级别的颜色。应该 可以是可以解释的 ,或者是 字典将色调级别映射到 matplotlib 颜色。 |
palette | 用于绘制填充颜色的原始饱和度的比例。大 面片通常使用不饱和的颜色看起来更好,但如果您希望颜色与输入值完美匹配,请将其设置为。1 |
3.1.1、常规柱状图
import seaborn as sns
import pandas as pd
# 示例数据
tips=pd.read_csv('tips.csv')
# 单变量柱状图
sns.barplot(x="day", y="total_bill", data=tips)
# 显示图表
plt.show()
3.1.2、横向条形图
import seaborn as sns
import pandas as pd
# 示例数据
tips=pd.read_csv('tips.csv')
# 单变量柱状图
sns.barplot(x="total_bill", y="day", data=tips)
# 显示图表
plt.show()
3.1.3、分组条图
import seaborn as sns
import pandas as pd
# 示例数据
tips=pd.read_csv('tips.csv')
import seaborn as sns
# 分组柱状图
sns.barplot(x="day", y="total_bill", hue="sex", data=tips)
# 显示图表
plt.show()
3.1.4、设置颜色
import seaborn as sns
# 示例数据
tips=pd.read_csv('tips.csv')
# 设置颜色
sns.barplot(x="day", y="total_bill", data=tips,color='salmon')
sns.barplot(x="day", y="total_bill", hue="sex", data=tips,palette='dark:salmon')
# 显示图表
plt.show()
3.1.5、 统计数量
seaborn.countplot(data=None, *, x=None, y=None, hue=None, color=None, palette=None)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
color | 用于变量的不同级别的颜色。应该 可以是可以解释的 ,或者是 字典将色调级别映射到 matplotlib 颜色。 |
palette | 用于绘制填充颜色的原始饱和度的比例。大 面片通常使用不饱和的颜色看起来更好,但如果您希望颜色与输入值完美匹配,请将其设置为。1 |
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
tips = pd.read_csv('tips.csv')
# 通过按天数对数据进行分组并计数
# display(tips.groupby('day').count())
# 使用ountplot 方法绘制当天小费数量的条形图
sns.countplot(x="day", data=tips)
# 显示绘制的图形
plt.show()
3.2、直方图
方法
-
histplot方法 绘制单变量或双变量直方图来显示数据集的分布
-
displot方法 绘制直方图、核密度图。可以比较多个变量分布情况
seaborn.histplot(data=None,x=None, y=None, hue=None, bins='auto',multiple='layer', element='bars', kde=False, palette=None,color=None)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
color | 用于变量的不同级别的颜色。应该 可以是可以解释的 ,或者是 字典将色调级别映射到 matplotlib 颜色。 |
palette | 用于绘制填充颜色的原始饱和度的比例。大 面片通常使用不饱和的颜色看起来更好,但如果您希望颜色与输入值完美匹配,请将其设置为。1 |
bins | 通用 bin 参数,可以是引用规则的名称, 分箱数或分箱的分隔线。 |
multiple | 语义映射创建子集时解析多个元素的方法。 仅与单变量数据相关。 {“layer”, “减淡”, “stack”, “fill”} |
elment | 直方图统计量的可视化表示形式。 仅与单变量数据相关。 {“bars”, “step”, “poly”} |
seaborn.displot(data=None, *, x=None, y=None, hue=None, row=None, col=None, weights=None, kind='hist', rug=False, rug_kws=None, log_scale=None, legend=True, palette=None, hue_order=None, hue_norm=None, color=None, col_wrap=None, row_order=None, col_order=None, height=5, aspect=1, facet_kws=None, **kwargs)
row | 定义子集以在不同 facet 上绘制的变量。 |
col | 定义子集以在不同 facet 上绘制的变量。 |
3.2.1、常规直方图
sns.histplot(tips['total_bill'])
sns.displot(tips['total_bill'])
3.2.2、核密度估计
核密度估计的作用是用来估计概率密度函数的,它可以用来描述随机变量的密度分布
sns.histplot(tips['total_bill'],kde=True)
sns.displot(tips['total_bill'], kde=True)
3.2.3、多变量直方图
multiple='layer' # 默认值,以层叠的形式展示
multiple='dodge' # 以并列的形式展示
multiple='stack' # 以堆叠的形式展示
multiple='fill' # 以百分比堆叠的形式展示
sns.histplot(x='total_bill', hue='sex', data=tips)
sns.histplot(x='total_bill', hue='sex', data=tips, multiple='stack')
sns.histplot(x='total_bill', hue='sex', data=tips, multiple='dodge')
sns.histplot(x='total_bill', hue='sex', data=tips, multiple='fill')
3.2.4、修改一些参数
sns.histplot(x='total_bill', data=tips, bins=20, color='skyblue', edgecolor='black', linewidth=1.2)
sns.displot(x='total_bill', data=tips, bins=20, color='skyblue', edgecolor='black', linewidth=1.2)
3.2.5、 累积直方图
sns.histplot(x='total_bill', data=tips, element='step')
sns.displot(x='total_bill', data=tips, element='step',col='time')
3.3、折线图
方法
-
lineplot方法 单独绘制折线图
-
relplot方法 绘制折线图、散点图
seaborn.lineplot(data=None, x=None, y=None, hue=None)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
seaborn.relplot(data=None, *, x=None, y=None, hue=None, row=None, col=None kind='scatter')
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
row | 定义子集以在不同 facet 上绘制的变量。 |
col | 定义子集以在不同 facet 上绘制的变量。 |
kind | 要绘制的情节类型,对应于 seaborn 关系情节。 选项包括 或 。"scatter" "line" |
sns.lineplot(x=[1,2,3,4,5],y=[1,2,3,4,5])
sns.relplot(x=[1,2,3,4,5],y=[1,2,3,4,5],kind='line')
import seaborn as sns
# 示例数据
tips = pd.read_csv('tips.csv')
sns.lineplot(x="day", y="total_bill", data=tips)
sns.relplot(x="day", y="total_bill", data=tips, kind='line')
# 多变量折线图
sns.lineplot(x="day", y="total_bill", data=tips,hue='time')
sns.relplot(x="day", y="total_bill", data=tips,hue='time',kind='line')
# 使用relplot绘制折线图
sns.relplot(x="day", y="total_bill", data=tips,
kind='line',# 图像类型
hue='sex',# 分类变量
col='time') # 分图变量
3.4、散点图
方法
-
scatterplot方法 主要用于绘制两个数值变量之间的散点图
-
relplot方法 可以绘制多种类型的关系图,包括散点图
seaborn.scatterplot(data=None, x=None, y=None, hue=None)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
seaborn.relplot(data=None, *, x=None, y=None, hue=None, row=None, col=None kind='scatter')
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
row | 定义子集以在不同 facet 上绘制的变量。 |
col | 定义子集以在不同 facet 上绘制的变量。 |
kind | 要绘制的情节类型,对应于 seaborn 关系情节。 选项包括 或 。"scatter" "line" |
import seaborn as sns
# 加载数据
tips=pd.read_csv('tips.csv')
# 常规散点图
sns.scatterplot(data=tips,x='total_bill', y='tip')
sns.relplot( data=tips, x='total_bill', y='tip',kind='scatter')
# 多组散点图
sns.scatterplot(data=tips,x='total_bill', y='tip', hue='smoker')
sns.relplot(data=tips,x='total_bill', y='tip', hue='smoker')
# 多变量散点图
sns.relplot(data=tips,x='total_bill', y='tip', hue='smoker',col='time')
3.5、分散散点图
方法
-
stripplot方法 利用抖动功能绘制分类散点图,以减少过度绘图
-
swarmplot方法 绘制分类散点图,并将点调整为不重叠
-
catplot方法 可以绘制以上2种图,并且可以分图
seaborn.stripplot(data=None, *, x=None, y=None, hue=None,dodge=False)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
dodge | 当一个变量被赋值时,将其设置为 will 沿分类分隔不同色相级别的条带 轴并缩小分配给每个条带的空间量。否则 每个级别的点将绘制在同一条带中。 |
seaborn.swarmplot(data=None, *, x=None, y=None, hue=None,dodge=False)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
dodge | 当一个变量被赋值时,将其设置为 will 沿分类分隔不同色相级别的条带 轴并缩小分配给每个条带的空间量。否则 每个级别的点将绘制在同一条带中。 |
seaborn.catplot(data=None, *, x=None, y=None, hue=None, row=None, col=None, kind='strip')
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
row | 定义子集以在不同 facet 上绘制的变量。 |
col | 定义子集以在不同 facet 上绘制的变量。 |
kind | 要绘制的绘图类型对应于分类的名称 轴级绘图功能。选项有: “strip”, “swarm”, “box”, “violin”, “boxen”、“point”、“bar” 或 “count”。 |
import seaborn as sns
import pandas as pd
tips=pd.read_csv('tips.csv')
sns.catplot(y="total_bill", x="day", data=tips,hue='sex',dodge=True,marker="D",col='smoker')
sns.swarmplot(y="total_bill", x="day", data=tips,hue='sex',marker="v")
sns.catplot(y="total_bill", x="day", data=tips,hue='sex',marker="v",col='smoker',kind='swarm')
3.6、盒图
方法
-
boxplot方法
-
catplot方法
seaborn.boxplot(data=None, *, x=None, y=None, hue=None,fill=True,width=0.8, gap=0,notch=False)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
fill | 定义子集以在不同 facet 上绘制的变量。 |
gap | 箱体间隔 |
width | 箱体宽度 |
notch | 箱体是否缺口 |
seaborn.catplot(data=None, *, x=None, y=None, hue=None, row=None, col=None, kind='strip')
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
row | 定义子集以在不同 facet 上绘制的变量。 |
col | 定义子集以在不同 facet 上绘制的变量。 |
kind | 要绘制的绘图类型对应于分类的名称 轴级绘图功能。选项有: “strip”, “swarm”, “box”, “violin”, “boxen”、“point”、“bar” 或 “count”。 |
import seaborn as sns
import pandas as pd
tips = pd.read_csv('tips.csv')
sns.boxplot(x="day", y="total_bill", data=tips,hue="smoker",
fill=False, # 填充箱体,默认为True
gap=0.1, # 箱体间隔
width=0.5, # 箱体宽度
notch=True # 箱体是否缺口
)
sns.catplot(x="day", y="total_bill", data=tips,kind="box",col="sex")
3.7、小提琴图
提琴图的作用与箱形须线图类似。它显示了 数据点按一个(或多个)变量分组后的分布情况。 与箱图不同的是,每一个小提琴图都是通过对基础分布的核密度估计来绘制的。
方法
-
violinplot方法 绘制单图小提琴
-
catplot方法 绘制多图小提琴图
seaborn.violinplot(data=None, *, x=None, y=None, hue=None,split=False, gap=0)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
split | 显示未镜像的分布,使用 时交替使用 。 |
gap | 按此因子在方向轴上收缩,以在减淡元素之间添加间隙。 |
seaborn.catplot(data=None, *, x=None, y=None, hue=None, row=None, col=None, kind='strip')
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
row | 定义子集以在不同 facet 上绘制的变量。 |
col | 定义子集以在不同 facet 上绘制的变量。 |
kind | 要绘制的绘图类型对应于分类的名称 轴级绘图功能。选项有: “strip”, “swarm”, “box”, “violin”, “boxen”、“point”、“bar” 或 “count”。 |
import seaborn as sns
import pandas as pd
tips=pd.read_csv('tips.csv')
sns.violinplot(x="day", y="total_bill", data=tips,hue="smoker",fill=False,split=True,gap=0.1) # 设置间隔
sns.catplot(x="day", y="total_bill", data=tips,hue="smoker",kind="violin",col="sex")
3.8、热力图
方法
-
heatmap方法
seaborn.heatmap(data, *, vmin=None, vmax=None, cmap=None,annot=None, linewidths=0, cbar=True)
函数 | 描述 |
---|---|
data | 可以强制转换为 ndarray 的 2D 数据集。如果 Pandas DataFrame 时,索引/列信息将用于标记 列和行。 |
vmin | values 来锚定颜色图,否则它们将从 data 和其他关键字参数 |
vmax | values 来锚定颜色图,否则它们将从 data 和其他关键字参数 |
camp | 从数据值到色彩空间的映射。如果未提供,则 default 将取决于是否设置。 |
annot | 如果为 True,则在每个单元格中写入数据值。如果具有 与 相同形状,则改用此函数来注释热图 的数据。请注意,DataFrames 将匹配位置,而不是索引。 |
linewidth | 将划分每个单元格的线的宽度。 |
cbar | 是否绘制颜色条。 |
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
flights = pd.read_csv('flights.csv')
data=flights.pivot(index='month',columns='year',values='passengers')
sns.heatmap(data,annot=True,fmt='d',linewidths=.5,cbar=True,vmin=200,vmax=400)
3.9、点图
点图用于探索和比较两个分类变量之间的关系
主要特点和使用场景包括:
-
中心趋势的表示: 点图通过在坐标轴上的点表示每个组别的中心趋势,通常是均值。这使得你可以直观地比较不同组别的中心位置。
-
不确定性的展示: 除了点的位置表示中心趋势外,点图还通过垂直线(误差棒)表示中心趋势的不确定性,通常是置信区间。这有助于了解估计值的精度。
-
适用于两个分类变量: 点图的主要用途是比较两个分类变量之间的关系。一个分类变量通常用于横轴,另一个分类变量用于纵轴
方法
-
pointplot方法
-
catplot方法
seaborn.pointplot(data=None, *, x=None, y=None, hue=None,markers=<default>, linestyles=<default>,dodge=False)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
markers | 用于每个级别的标记 |
linestyles | 用于每个级别的线条样式。 |
dodge | 将变量的每个级别的点分隔的 amount 分类轴。设置为 将应用较小的默认值。 |
seaborn.catplot(data=None, *, x=None, y=None, hue=None, row=None, col=None, kind='strip')
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
row | 定义子集以在不同 facet 上绘制的变量。 |
col | 定义子集以在不同 facet 上绘制的变量。 |
kind | 要绘制的绘图类型对应于分类的名称 轴级绘图功能。选项有: “strip”, “swarm”, “box”, “violin”, “boxen”、“point”、“bar” 或 “count”。 |
markers | 用于每个级别的标记 |
linestyles | 用于每个级别的线条样式。 |
dodge | 将变量的每个级别的点分隔的 amount 分类轴。设置为 将应用较小的默认值。 |
import seaborn as sns
import matplotlib.pyplot as plt
tips = pd.read_csv('tips.csv')
sns.pointplot(x="day", y="total_bill", data=tips,hue='sex',markers=['o','s'],linestyles=['-','--'],dodge=True)
sns.catplot(x="day", y="total_bill", data=tips,hue='sex',markers=['o','s'],linestyles=['-','--'],dodge=True,kind='point',col='smoker')
3.10、核密度图
核密度估计图是一种用于估计概率密度函数的非参数方法
核密度估计图可以帮助理解数据的分布情况,尤其在连续变量的情况下,它提供了一种平滑的、连续的概率密度估计
主要特点和作用包括:
-
连续概率密度估计: 核密度估计图通过在每个数据点周围放置核(通常是高斯核)来估计连续概率密度函数。这样,我们可以看到整个变量范围内的概率密度变化
-
平滑曲线: 生成的图表是一条平滑的曲线,反映了数据的整体趋势。相对于直方图,核密度估计提供了更连续、更平滑的概率密度表示
-
用于多变量分布: 核密度估计图也可以用于可视化多个变量的联合分布情况
方法
-
kdeplot方法 核密度图
-
displot方法 支持多组、多图
seaborn.kdeplot(data=None, *, x=None, y=None, hue=None, palette=None, fill=None, multiple='layer')
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
palette | 选择映射语义时要使用的颜色的方法。 字符串值将传递给 .列表或字典值 隐含分类映射,而 colormap 对象隐含数值映射。 |
fill | 如果为 True,则填充单变量密度曲线下或之间的区域 二元等值线。如果为 None,则默认值取决于 。 |
multiple | 在语义映射创建子集时绘制多个元素的方法。 仅与单变量数据相关。 |
import seaborn as sns
tips = pd.read_csv('tips.csv')
sns.kdeplot(data=tips, x="total_bill", hue="sex",multiple="stack",alpha=.5,linewidth=0,palette="Blues",fill=True)
seaborn.displot(data=None, *, x=None, y=None, hue=None, row=None, col=None,kind='kde)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
row | 定义子集以在不同 facet 上绘制的变量。 |
col | 定义子集以在不同 facet 上绘制的变量。 |
kind | 可视化数据的方法。选择基础绘图函数 并确定其他有效参数集。 |
sns.displot(data=tips, x="total_bill", y="tip",fill=True,kind='kde',col='time')
3.11、回归图
线性回归图是用于可视化线性回归分析结果的图表。它通常包括散点图、回归线和误差条,以便直观地展示自变量和因变量之间的线性关系。线性回归图的主要组成部分包括:
-
散点图(Scatter Plot): 在图中绘制了自变量和因变量的散点,每个点代表一个观测数据。散点图帮助我们直观地观察变量之间的分布和可能的关系
-
回归线(Regression Line): 通过回归分析,得到了一条最佳拟合的直线,它代表了自变量和因变量之间的线性关系。回归线的斜率表示了这种关系的方向和强度
-
误差条(Error Bars): 误差条通常在每个点附近绘制,用于表示每个观测值的误差范围。这有助于了解拟合程度和数据的离散程度
-
回归方程信息: 可能包括回归方程、截距、斜率等信息,以提供更详细的模型解释
方法
-
sns.regplot方法
-
sns.lmplot方法 支持分组、分图
注意
可能需要安装 statsmodels模块,安装完模块要重启当前的ipynb文件环境
pip install statsmodels
seaborn.regplot(data=None, *, x=None, y=None, marker='o', scatter_kws=None)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
marker | 用于散点图字形的标记。 |
sactter_kws | 要传递给 和 的其他关键字参数。plt.scatter plt.plot |
seaborn.lmplot(data, *, x=None, y=None, hue=None, col=None, row=None)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
row | 定义子集以在不同 facet 上绘制的变量。 |
col | 定义子集以在不同 facet 上绘制的变量。 |
sns.regplot(data=tips,x='tip',y='total_bill',
scatter_kws={'s':50,'alpha':0.3,'color':'skyblue'},
marker='s'
)
sns.lmplot(data=tips,x='tip',y='total_bill',hue='sex',col='time')
3.12、联合图
方法
-
jointplot方法
seaborn.jointplot(data=None, *, x=None, y=None, hue=None, kind='scatter',marginal_kws=None)
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
x | 用于绘制长格式数据的输入。 |
y | 用于绘制长格式数据的输入。 |
hue | 用于绘制长格式数据的输入。对原有的属性进行更加细致的分组 |
kind | scatter,kde,hist,reg,hex,resid |
marginal_kws | plot 组件的其他关键字参数。 |
sns.jointplot(data=tips,x='tip',y='total_bill')
sns.jointplot(data=tips,x='tip',y='total_bill',kind='scatter') # kind='scatter' 散点图
sns.jointplot(data=tips,x='tip',y='total_bill',kind='kde') # 盒密度
sns.jointplot(data=tips,x='tip',y='total_bill',kind='hist') # 直方图
sns.jointplot(data=tips,x='tip',y='total_bill',kind='reg') # 回归图+直方图
sns.jointplot(data=tips,x='tip',y='total_bill',kind='hex') # 六角+直方图
sns.jointplot(data=tips,x='tip',y='total_bill',kind='resid') # 残差+直方图
sns.jointplot(data=tips,x='tip',y='total_bill',hue='sex',
palette='dark:red',kind='hist',marginal_kws={'fill':False,'bins':10})
3.13、成队绘图
方法
pairplot方法
seaborn.pairplot(data, *, hue=None, vars=None, diag_kind='auto')
函数 | 描述 |
---|---|
data | 用于绘图的数据集。 |
hue | 分组 |
vars | 变量 中的变量,否则将每列与 数值数据类型。 |
diag_kind | 对角线子图的 Kind plot。如果为 'auto' |
sns.pairplot(data=tips,vars=["total_bill","tip"],hue="smoker",kind='scatter')
sns.pairplot(data=tips,vars=["total_bill","tip"],hue="smoker",
kind='hist', # 设置除中线图形类型
diag_kind='kde', # 设置中线图形类型
)
3.14、绘制图表到子图
import seaborn as sns
from matplotlib import pyplot as plt
import pandas as pd
tips = pd.read_csv('tips.csv')
fig,ax= plt.subplots(2,2,figsize=(20,8))
sns.lineplot(x="total_bill", y="tip", data=tips, ax=ax[0,0])
sns.lineplot(x="size", y="tip", data=tips, ax=ax[0][1])
3.15、使用FacetGrid绘图
参数 | 描述 | 对应使用了FacetGrid函数 |
---|---|---|
plt.plot/sns.lineplot | 折线图 | sns.relplot(kind='line') |
plt.hexbin | 六边形图 | sns.jointplot(kind='hex') |
plt.hist/sns.histplot | 直方图 | sns.distplot() |
plt.scatter/sns.scatterplot | 散点图 | sns.relplot(kind='scatter') |
sns.stripplot | 分类散点图 | sns.catplot(kind='strip') |
sns.swarmplot | 分散分类散点图 | sns.catplot(kind='swarm') |
sns.boxplot | 箱图 | sns.catplot(kind='box') |
sns.violinplot | 小提琴图 | sns.catplot(kind='violin') |
sns.pointplot | 点线图 | sns.catplot(kind='point') |
sns.barplot | 条图 | sns.catplot(kind='bar') |
sns.countplot | 数量统计条图 | sns.catplot(kind='count') |
sns.regplot | 回归线图 | sns.lmplot() |
其它 | 其它 | 其它 |
import seaborn as sns
import pandas as pd
tips=pd.read_csv('tips.csv')
绘制单图表
g = sns.FacetGrid(tips)
g.map(sns.scatterplot, "total_bill", "tip")
g.map(sns.regplot, "total_bill", "tip")
绘制多组图表
g = sns.FacetGrid(tips,col="time",row="smoker",hue='sex',
palette="Set1", # 设置颜色
height=4, aspect=1.5, # 设置大小
hue_kws={"marker": ["*", "s"]}, # 设置标记
)
g.map(sns.regplot, "total_bill", "tip")