seaborn 小笔记

前置知识#

大概需要了解一点点matplotlib

在开始之前#

Install Seaborn and Matplotlib

Use %matplotlib inline to show picture in Jupyter.

代码里用到的数据集titanic 大概长这个样子:

所有的代码均为精简版,请勿直接运行

beautify#

画图最重要的当然是美化啦!

seaborn内置了六种颜色模式,并提供了丰富的自定义颜色方法。可以通过palette设置颜色模式。前面六种是内置的颜色模式,挑选一个自己喜欢的吧!(顺带一提,pastel是真的舒服

另外,如果你想要规定颜色数,可以尝试hls或者husl

自定义的渐变色或许也是一个不错的选择

也许你喜欢内置的渐变色?

下面演示了上面提到的所有模式

Copy
sns.countplot(x='deck', data=titanic, ax=axes[0, 0], palette=sns.color_palette('deep')) sns.countplot(x='deck', data=titanic, ax=axes[0, 1], palette=sns.color_palette('muted')) sns.countplot(x='deck', data=titanic, ax=axes[0, 2], palette=sns.color_palette('pastel')) sns.countplot(x='deck', data=titanic, ax=axes[1, 0], palette=sns.color_palette('bright')) sns.countplot(x='deck', data=titanic, ax=axes[1, 1], palette=sns.color_palette('dark')) sns.countplot(x='deck', data=titanic, ax=axes[1, 2], palette=sns.color_palette('colorblind')) sns.countplot(x='deck', data=titanic, ax=axes[2, 0], palette=sns.color_palette('hls', 3)) sns.countplot(x='deck', data=titanic, ax=axes[2, 1], palette=sns.color_palette('light:#5A9')) sns.countplot(x='deck', data=titanic, ax=axes[2, 2], palette=sns.color_palette('flare'))

如果你还想自定义一些东西,可以参考这个

displot#

三个选项,hist(默认),kde,ecdf,效果分别和 histplot kedplot ecdf 相同。可以通过kde=True在直方图上叠加曲线。

Copy
sns.histplot(age1, stat='density', ax=axes[0, 0]) sns.histplot(age1, stat='count', ax=axes[0, 1], kde=True, bins=30, color='green') sns.kdeplot(age1, ax=axes[1, 0], shade=True) sns.ecdfplot(age1, ax=axes[1, 1])

一些解释:age1为事先生成的数据,ax控制其在画布的位置

P.S. 一个小坑,displot好像不支持上方这种画布,所以调用了与之效果相同的函数

barplot#

barplot可以直接从数据集中画出柱状图,设置x和y代表的含义,hue用于对x轴的数据进行细分,详情如下。

Copy
sns.barplot(x='sex', y='survived', data=titanic, ax=axes[0]) sns.barplot(x='sex', y='survived', hue='class' ,data=titanic, ax=axes[1])

countplot#

顾名思义,计数图,用法和barplot类似。你可以 通过x或y来选择图片的方向

Copy
sns.countplot(x='class', hue='sex', data=titanic, ax=axes[0]) sns.countplot(y='deck', data=titanic, ax=axes[1])

stripplot#

绘制散点图,同样地,可以用hue进行细分,用jitter控制是否抖动

Copy
sns.stripplot(x='class', y='age', data=titanic, ax=axes[0]) sns.stripplot(x='class', y='age', data=titanic, ax=axes[1], jitter=0) sns.stripplot(x='class', y='age', data=titanic, ax=axes[2], hue='sex')

swarmplot#

同样是散点图,但是更加直观,更适合小数据

boxplot#

img

同样地,可以改变x y的顺序,进行细分。

Copy
sns.boxplot(x='class', y='age', data=titanic, ax=axes[0]) sns.boxplot(x='age', y='class', hue='sex', data=titanic, order=['Second', 'Third', 'First'], ax=axes[1])

P.S. 几乎所有的图都能通过 order 和 hue_order 来更改顺序

violinplot#

boxplot 的升级版,可以看到数据的更具体地分布

当hue参数只有两个级别时,可以设置'split'为True,效果如下。

如果不喜欢里面的箱子,可以换成虚线(我个人是很喜欢虚线那种啦

Copy
sns.violinplot(x='class', y='age', data=titanic, hue='sex', split=True, ax=axes[0]) sns.violinplot(x='class', y='age', data=titanic, hue='sex', split=True, ax=axes[1], inner='quartile')

regplot#

绘制回归曲线,为了方便演示,数据换成了taxis qwq

可以用 ci 控制置信区间(0~100),truncate=False拓展直线,marker等参数更改样式

Copy
sns.regplot(y='total', x='distance', data=taxis, ax=axes[0]) sns.regplot(y='total', x='distance', data=taxis, ax=axes[1], ci=0, truncate=False, marker="+")

或许你会想用多项式函数或者log ?

Copy
sns.regplot(y='total', x='distance', data=taxis, order=2, ax=axes[0]) sns.regplot(y='total', x='distance', data=taxis, logx=True, ax=axes[1])

神奇地是,可以使用x_bins=4把x划分为离散的box

../_images/seaborn-regplot-7.png

lmplot#

regplot 的升级版,增加了分类别地展示的功能

Copy
sns.lmplot(y='total', x='distance', hue='color', data=taxis,markers=['*','o'])

使用col来把图片分开

Copy
sns.lmplot(y='total', x='distance', col='color', hue='color', data=taxis, markers=['*', 'o'])

所以为什么黄车比绿车要贵呢,小编也不知道(可能是因为截取的数据量太少

heatmap#

绘制热力图需要一个严格的函数关系,即z=f(x,y)

又换了数据qwq

以year month 为 坐标轴,绘制 passengers 的热力图如下

Copy
flights = sns.load_dataset("flights") f = flights.pivot('year', 'month', 'passengers') sns.heatmap(f)

可以将数据展示在图中,以及换颜色(

Copy
sns.heatmap(f, annot=True, fmt="d", cmap=sns.color_palette("cubehelix", as_cmap=True))

posted @   Ηydra  阅读(288)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示
CONTENTS