Python学习之Seaborn
如果说Matplotlib试图让简单的事情变得容易,让困难的事情成为可能,那么Seaborn试图让一组定义明确的复杂的事情变得简单.
Seaborn是在Matplotlib的基础上开发的高级可视化库, 它更专注于数据可视化的美学设计和统计图形的绘制.
Matplotlib需要大量的代码创建细节,而seaborn可以说是高级封装形成的一个“快捷方式”,相比Matplotllib,seaborn代码更简洁,美观,但缺点是很多内容是固定的,定制化能力较差
编码方式:Figure-Level & Axes-Level
# displot 有很多可调节的参数,下面列出一些常用参数:# data:
# 输入数据集:通常是pandas.DataFrame
#
# x:
# 要绘制的变量名(即要放在横轴的列)
#
# y:
# 如果绘制的是个二维分布图,则可以指定纵轴的数据,对于displot,一般情况下,我们只关心单个变量的分布,因此通常不适用y
#
# hue:
# 根据某个分类变量分色,下面示例中使用了 species 使得不同种类的企鹅在图表中呈现不同颜色
#
# kind:
# 指定绘图的类型,可以选择一下几种类型:
# "hist":绘制直方图(默认)
# 'kde':核密度估计图,展示数据的概率密度分布
# 'ecdf':经验积累分布函数图
#
# multiple:
# 控制如何在图中展示不同类型的变量(例如通过 hue 设置的类别)
# 'stack':将不同类别的数据堆叠在一起(即品书叠加)
# 'dodge':不同类别并排显示
# 'fill':不同类别的相对比例
#
# col:
# 如果指定了col参数,displot会为数据中每个不同类别创建一个单独的子图,通常用于创建多个子图来比较不同类别的数据分布
#
# binwidth:
# 控制直方图的每个柱状条的宽度,通过调整binwidth,可以控制数据的粒度
#
# bins:
# 控制直方图的柱状条的数量或位置,如果没有指定,displot会自动选择一个合适的数量
#
# aspect:
# 控制子图的纵横比,例如:aspect = 1 表示长宽比为1
#
# height:
# 控制图形的高度,通常和aspect一起调整来修改图形的大小
# figure-level可轻松生成多个子图
sns.set() #用于设置默认的主题和样式,改善绘图的外观,可以调节字体,颜色,背景,网格,使得图表看起来更漂亮且易于理解
sns.displot(data=penguins, x='flipper_length_mm', hue='species', multiple='stack') # ,kind='kde'
# hue='species':这个参数控制了不同类别的区分(在这个例子中,是根据企鹅种类来着色,使得不同种类的企鹅具有不同的颜色)
sns.displot(data=penguins, x='flipper_length_mm', hue='species', col='species')# axes-level 可以更方便地进行图形组合
# 创建一个包含1行2列地子图布局,使用了一个参数字典来指定子图布局的设置,比例大小为:4:3
fig, axs = plt.subplots(1, 2, figsize=(8, 4), layout='constrained', gridspec_kw=dict(width_ration=[4, 3])) #anx:表示一个包含两个子图对象的数组
# 这个参数控制子图的宽度比例, width_ration=[4, 3] 表示第一个子图的宽度占整个图形的4/7, 第二个子图的宽度占3/7
sns.scatterplot(data=penguins, x='flipper_length_mm', y='bill_length_mm', hue='species', ax=axs[0])
sns.histplot(data=penguins, x='species', hue='species', shrink=.8, alpha=.8, legend=False, ax=axs[1]) #shrink调整直方图柱子的宽度 alpha设置柱子的透明度
fig.tight_layout()#除了单体图表,seaborn还有预设好的复合图表函数jonintplot和pairplot
# jointplot:绘制两个变量的关系或联合分布,同时添加边际轴,分别显示每个变量的单变量分布
sns.jointplot(data=penguins, x='flipper_length_mm', y='bill_length_mm', hue='species')
# pairplot:结合联合和边缘视图 但不是关注单一关系,而是同时可视化每个成对变量组合
sns.pairplot(data=penguins, hue='species')