作者:奔雷手,目前是名在校学生,当前主要在学习机器学习,也在做机器学习方面的助教,相对还是比较了解初学者学习过程的需求和问题,希望通过这个专栏能够广结好友,共同成长。

编辑:王老湿

3. 

4. 

5. 
Seaborn就是让困难的东西更加简单。它是针对统计绘图的,一般来说,能满足数据分析90%的绘图需求。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,应该把Seaborn视为matplotlib的补充,而不是替代物。

seaborn一共有5个大类21种图,分别是:

  • Relational plots 关系类图表

  1. relplot() 关系类图表的接口,其实是下面两种图的集成,通过指定kind参数可以画出下面的两种图

  2. scatterplot() 散点图

  3. lineplot() 折线图

  • Categorical plots 分类图表

  1. stripplot() 分类散点图

  2. swarmplot() 能够显示分布密度的分类散点图

  3. boxplot() 箱图

  4. violinplot() 小提琴图

  5. boxenplot() 增强箱图

  6. pointplot() 点图

  7. barplot() 条形图

  8. countplot() 计数图

  • Distribution plot 分布图

  1. jointplot() 双变量关系图

  2. pairplot() 变量关系组图

  3. distplot() 直方图,质量估计图

  4. kdeplot() 核函数密度估计图

  5. rugplot() 将数组中的数据点绘制为轴上的数据

  • Regression plots 回归图

  1. lmplot() 回归模型图

  2. regplot() 线性回归图

  3. residplot() 线性回归残差图

  • Matrix plots 矩阵图

  1. heatmap() 热力图

  2. clustermap() 聚集图

下面展现一下以上涉及的大部分绘图示例,所涉及参数均有注释,(可左右滑动代码段)在数据集符合要求的情况下,我们大多可以用一行代码实现绘图功能,相信看完示例后你就能初步掌握seaborn画图,如果对绘图要求更高的话,可以查询seaborn手册更改所画图类型的其他默认参数

%matplotlib inline
# 如果不添加这句,是无法直接在jupyter里看到图的
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

set()重置默认的主题参数:darkgrid, whitegrid, dark, white, ticks。默认的主题darkgrid

sns.set()
# 加载数据集Anscombe 看下数据
df = sns.load_dataset("anscombe")
df.head()

seaborn内置了不少样例数据,为dataframe类型,如果要查看数据,可以使用类似df.head()命令查看

lmplot(回归图)

lmplot是用来绘制回归图的,通过lmplot我们可以直观地总览数据的内在关系。

#显示每个数据集的线性回归结果,xy变量,col,hue定义数据子集变量,可以把它看作分类绘图依据
#data数据,col_wap列变量,ci置信区间,palette调色板,height高度,scatter_kws由散点连线
sns.lmplot(x="x", y="y", col="dataset", hue="dataset", data=df,col_wrap=2, ci=None, palette="muted", height=4,scatter_kws={"s": 50, "alpha": 1})
#多元线性回归 重置主题
sns.set()
# 加载iris dataset
iris = sns.load_dataset("iris")
#hue定义数据子集变量,可以把它看作分类绘图依据,truncate回归线
g = sns.lmplot(x="sepal_length", y="sepal_width", hue="species",truncate=True, height=5, data=iris)
# 使用自定义轴标签
g.set_axis_labels("Sepal length (mm)", "Sepal width (mm)")
# 设置主题风格
sns.set()
# 加载titanic dataset
df = sns.load_dataset("titanic")
# 制作具有性别色彩的自定义调色板
pal = dict(male="#6495ED", female="#F08080")
# 生存概率如何随年龄和性别变化
# y_jitter回归噪声,logistic逻辑回归模型
g = sns.lmplot(x="age", y="survived", col="sex", hue="sex", data=df,palette=pal, y_jitter=.02, logistic=True)
#自定义坐标轴刻度
g.set(xlim=(0, 80), ylim=(-.05, 1.05))

kdeplot(核密度估计图)

核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。通过核密度估计图可以比较直观的看出数据样本本身的分布特征。具体用法如下:

sns.set()
#生成随机种子
rs = np.random.RandomState(50)
# 设置matplotlib图 共享坐标轴
f, axes = plt.subplots(3, 3, figsize=(9, 9), sharex=True, sharey=True)
for ax, s in zip(axes.flat, np.linspace(0, 3, 10)):# 创键调色板图cmap = sns.cubehelix_palette(start=s, light=1, as_cmap=True)# 生成并绘制随机双变量数据集,shade设置阴影,cut限制曲线x, y = rs.randn(2, 50)sns.kdeplot(x, y, cmap=cmap, shade=True, cut=5, ax=ax)ax.set(xlim=(-3, 3), ylim=(-3, 3))
f.tight_layout()

FacetGrid

是一个绘制多个图表(以网格形式显示)的接口。

#按数据子集构造直方图
sns.set()
tips = sns.load_dataset("tips")
# row行设置,margin_titles边缘标题,bins直方图参数分段
g = sns.FacetGrid(tips, row="sex", col="time", margin_titles=True)
bins = np.linspace(0, 60, 13)
g.map(plt.hist, "total_bill", color="steelblue", bins=bins)

distplot(单变量分布直方图)

在seaborn中想要对单变量分布进行快速了解最方便的就是使用distplot()函数,默认情况下它将绘制一个直方图,并且可以同时画出核密度估计(KDE)。

sns.set(, palette="muted", color_codes=True)
rs = np.random.RandomState(10)
#设置matplotlib图
f, axes = plt.subplots(2, 2, figsize=(7, 7), sharex=True)
sns.despine(left=True)
# 生成随机单变量数据集
d = rs.normal(size=100)
#kde=False不绘制核密度图,ax第一个图,坐标左上
sns.distplot(d, kde=False, color="b", ax=axes[0, 0])
# 不绘制直方图即绘制核密度图,rug在轴上画凹槽
sns.distplot(d, hist=False, rug=True, color="r", ax=axes[0, 1])
# 绘制核密度图,设置阴影
sns.distplot(d, hist=False, color="g", kde_kws={"shade": True}, ax=axes[1, 0])
# 绘制核密度图直方图
sns.distplot(d, color="m", ax=axes[1, 1])
plt.setp(axes, yticks=[])
plt.tight_layout()

lineplot

seaborn里的lineplot函数所传数据必须为一个pandas数组.

sns.set()
# 加载样例数据
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint", y="signal",hue="region", ,data=fmri)

relplot

这是一个图形级别的函数,它用散点图和线图两种常用的手段来表现统计关系。

sns.set()
dots = sns.load_dataset("dots")
palette = dict(zip(dots.coherence.unique(),sns.color_palette("rocket_r", 6)))
# hue, col分类依据,size将产生不同大小的元素的变量分组,aspect长宽比,legend_full每组均有条目
sns.relplot(x="time", y="firing_rate",hue="coherence", size="choice", col="align",size_order=["T1", "T2"], palette=palette,height=5, aspect=.75, facet_kws=dict(sharex=False),kind="line", legend="full", data=dots)

boxplot

箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。它能显示出一组数据的最大值、最小值、中位数及上下四分位数。

sns.set(, palette="pastel")
# 加载数据
tips = sns.load_dataset("tips")
# hue分类依据
sns.boxplot(x="day", y="total_bill",hue="smoker", palette=["m", "g"],data=tips)
#offset设置纵横两轴近原点端点距离原地的距离
sns.despine(offset=10, trim=True)

violinplot

violinplot与boxplot扮演类似的角色,它显示了定量数据在一个(或多个)分类变量的多个层次上的分布,这些分布可以进行比较。不像箱形图中所有绘图组件都对应于实际数据点,小提琴绘图以基础分布的核密度估计为特征。

sns.set()
rs = np.random.RandomState(0)
n, p = 40, 8
d = rs.normal(0, 2, (n, p))
d += np.log(np.arange(1, p + 1)) * -5 + 10
pal = sns.cubehelix_palette(p, rot=-.5, dark=.3)
# inner小提琴内部数据点的表示
sns.violinplot(data=d, palette=pal, inner="points")
sns.set(, palette="pastel", color_codes=True)
tips = sns.load_dataset("tips")
sns.violinplot(x="day", y="total_bill", hue="smoker",split=True, inner="quart",palette={"Yes": "y", "No": "b"},data=tips)
#在隐藏右和上边框线的同时,隐藏左边线。
sns.despine(left=True)

heatmap热力图

利用热力图可以看数据表里多个特征两两的相似度。

sns.set()
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")
# annot在每个单元格中写入数据值,线宽5
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5, ax=ax)

jointplot

用于2个变量的画图,将两个变量的联合分布形态可视化出来往往会很有用。在seaborn中,最简单的实现方式是使用jointplot()函数,它会生成多个面板,不仅展示了两个变量之间的关系,也在两个坐标轴上分别展示了每个变量的分布。

sns.set()
rs = np.random.RandomState(5)
mean = [0, 0]
cov = [(1, .5), (.5, 1)]
x1, x2 = rs.multivariate_normal(mean, cov, 500).T
x1 = pd.Series(x1, name="$X_1$")
x2 = pd.Series(x2, name="$X_2$")
# kind:scatter,reg,resid,kde,hex变量可视化种类,space轴与边缘轴之间的空间
g = sns.jointplot(x1, x2, kind="kde", height=7, space=0)

HexBin图

sns.set()
rs = np.random.RandomState(11)
x = rs.gamma(2, size=1000)
y = -.5 * x + rs.normal(size=1000)
sns.jointplot(x, y, kind="hex", color="#4CB391")
sns.set()
tips = sns.load_dataset("tips")
g = sns.jointplot("total_bill", "tip", data=tips, kind="reg",xlim=(0, 60), ylim=(0, 12), color="m", height=7)

catplot

分类图表的接口,通过指定kind参数可以画出下面的八种图

stripplot() 分类散点图

sns.set()
titanic = sns.load_dataset("titanic")
g = sns.catplot(x="class", y="survived", hue="sex", data=titanic,height=6, kind="bar", palette="muted")
#隐藏左边线
g.despine(left=True)
g.set_ylabels("survival probability")
sns.set()
df = sns.load_dataset("exercise")
g = sns.catplot(x="time", y="pulse", hue="kind", col="diet",capsize=.2, palette="YlGnBu_d", height=6, aspect=.75,kind="point", data=df)
g.despine(left=True)

pointplot

点图代表散点图位置的数值变量的中心趋势估计,并使用误差线提供关于该估计的不确定性的一些指示。点图可能比条形图更有用于聚焦一个或多个分类变量的不同级别之间的比较。他们尤其善于表现交互作用:一个分类变量的层次之间的关系如何在第二个分类变量的层次之间变化。连接来自相同色调等级的每个点的线允许交互作用通过斜率的差异进行判断,这比对几组点或条的高度比较容易。

sns.set()
iris = sns.load_dataset("iris")
iris = pd.melt(iris, "species", var_name="measurement")
f, ax = plt.subplots()
sns.despine(bottom=True, left=True)
# 用散点图显示每个观察结果 jitter抖动量为了更容易地看到分布
sns.stripplot(x="value", y="measurement", hue="species",data=iris, dodge=True, jitter=True,alpha=.25, zorder=1)
# dodge每个级别的点数,join同一点的估计值之间不绘制线
sns.pointplot(x="value", y="measurement", hue="species",data=iris, dodge=.532, join=False, palette="dark",markers="d", scale=.75, ci=None)
# 完善图例
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles[3:], labels[3:], title="species",handletextpad=0, columnspacing=1,loc="lower right", ncol=3, frameon=True)

boxenplot(增强箱图)

sns.set()
diamonds = sns.load_dataset("diamonds")
clarity_ranking = ["I1", "SI2", "SI1", "VS2", "VS1", "VVS2", "VVS1", "IF"]
#order分类
sns.boxenplot(x="clarity", y="carat",color="b", order=clarity_ranking,scale="linear", data=diamonds)

Scatterplot(散点图)

sns.set()
planets = sns.load_dataset("planets")
cmap = sns.cubehelix_palette(rot=-.2, as_cmap=True)
ax = sns.scatterplot(x="distance", y="orbital_period",hue="year", size="mass",palette=cmap, sizes=(10, 200),data=planets)

PairGrid

用于绘制数据集中成对关系的子图网格。

sns.set()
df = sns.load_dataset("iris")
g = sns.PairGrid(df, diag_sharey=False)
g.map_lower(sns.kdeplot)
g.map_upper(sns.scatterplot)
g.map_diag(sns.kdeplot, lw=3)

residplot

线性回归残差图

#绘制模型残差
sns.set()
# 使用以下示例数据集y ~ x
rs = np.random.RandomState(7)
x = rs.normal(2, 1, 75)
y = 2 + 1.5 * x + rs.normal(0, 2, 75)
# 拟合线性模型后绘制残差,lowess平滑
sns.residplot(x, y, lowess=True, color="g")

swarmplot

能够显示分布密度的分类散点图

sns.set(, palette="muted")
# 加载iris dataset
iris = sns.load_dataset("iris")
iris = pd.melt(iris, "species", var_name="measurement")
sns.swarmplot(x="measurement", y="value", hue="species",palette=["r", "c", "y"], data=iris)

pairplot

变量关系组图

sns.set()
df = sns.load_dataset("iris")
sns.pairplot(df, hue="species")

clustermap

聚集图

sns.set()
# 加载brain networks dataset
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)
# 选择网络的一个子集
used_networks = [1, 5, 6, 7, 8, 12, 13, 17]
used_columns = (df.columns.get_level_values("network").astype(int).isin(used_networks))
df = df.loc[:, used_columns]
#创建分类调色板以识别网络
network_pal = sns.husl_palette(8, s=.45)
network_lut = dict(zip(map(str, used_networks), network_pal))
# 将调色板转换为将在矩阵侧面绘制的矢量
networks = df.columns.get_level_values("network")
network_colors = pd.Series(networks, index=df.columns).map(network_lut)
# 绘图
sns.clustermap(df.corr(), center=0, cmap="vlag",row_colors=network_colors, col_colors=network_colors,linewidths=.75, figsize=(13, 13))

小白也能看懂的seaborn入门示例相关推荐

  1. 小白都能看懂的缓存入门

    缓存是程序员必须了解的技术,无论是前端.后端还是客户端,大到复杂的系统架构,小到 CPU 或是芯片,都少不了缓存的影子. 下面只需 5 分钟,带你入门缓存技术. 什么是缓存? 缓存(Cache)本意是 ...

  2. 小白也能看懂的git入门实操[狂神聊git学习笔记]

    写在前面:本文为狂神聊git视频的学习笔记,仅供个人学习使用,如有侵权,请联系删除. 视频链接:https://www.bilibili.com/video/BV1FE411P7B3 文档参考:htt ...

  3. 小白也可以看懂的PoC容量证明入门

    PoC是今年区块链领域中最值得关注的概念板块, 没有之一. 预测在一年内,PoC板块会全面爆发, 其中至少2-3个代表性项目集中爆发,冲击市值Top20: 而在两年内,大概率会有PoC龙头项目进入市值 ...

  4. 随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...

    一.什么是随机森林 前面我们已经介绍了决策树的基本原理和使用.但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样 ...

  5. 量子计算机-争取让没有物理、数学背景的小白也能看懂!

    ❤作者简介:研究生在读 IT女; 如果文章有错请指正,让我们一起学习,天天向上,一起进步! 如果对你有帮助,还请点赞收藏哦~❤ 这个系列到时候会有很多篇,我尽量写的详细易懂,争取让没有物理数学背景的小 ...

  6. python进阶(小白也能看懂)——装饰器浅谈(一)

    python进阶(小白也能看懂)--装饰器(一) 第四篇 文章目录 python进阶(小白也能看懂)--装饰器(一) 1.函数基础知识 例子1.1 例子1.2 例子1.3 例子1.4 2.不带参数的装 ...

  7. python进阶(小白也能看懂)——Map、Filter、Reduce

    python进阶(小白也能看懂)--Map.Filter.Reduce 第三篇 Map.Filter.Reduce是python中常用的函数,使用这些函数能够给我们带来很多便捷. Map map(fu ...

  8. python进阶(小白也能看懂)——*args与**kwargs的使用

    python进阶(小白也能看懂)--*args与**kwargs的使用 第一篇 理解*args与**kwargs在定义函数时的作用 假设你写了一个函数multiply(函数定义在下面),专门用来处理两 ...

  9. 小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 3)

    小白都能看懂的实战教程 手把手教你Python Web全栈开发 Flask(Python Web)实战系列之在线论坛系统 第三讲 这是小白都能看懂的实战教程 手把手教你Python Web全栈开发 的 ...

最新文章

  1. dp_Pku1887
  2. book mac pro怎么重装系统_Macbook Pro怎么重装系统
  3. java中的类型擦除type erasure
  4. 【ZOJ - 3715】Kindergarten Election(枚举得票数,贪心)
  5. java compareto方法怎么排序的_很简单却能让你面试头疼得Java容器,这里从源码给你解释清楚
  6. 测试AtomicInteger与普通int值在多线程下的递增操作
  7. 事件Event:带你体验鸿蒙轻内核中一对多、多对多任务同步
  8. oracle trigger 延迟执行_springboot中定时任务执行Quartz的使用
  9. springboot和vue data数据为空_常见数据结构的 Python 实现(建议收藏)
  10. [转] 你没看过的囧人囧事大集合
  11. 网络视频会议软件哪个好?欢迎大家补位!
  12. window10设置系统还原点和使用还原点还原系统
  13. Android 手机实现网络嗅探发现周围设备(类似悟空遥控器)
  14. uniapp调试ESC指令热敏打印机 打印图片 以及 打印途中报10007特性不支持解决方案
  15. CDLinux U盘启动教程
  16. 汇编总结(3)——程序设计初步
  17. Markdown格式
  18. 2.5 CMMI2级——配置管理(Configuration Management)
  19. UE4 蓝图Structure与Xml的读取
  20. CRM八面体:了解客户关系管理的结构

热门文章

  1. 以计算机专业为主的活动,院系宣传 | 计算机科学与技术系:以梦为码
  2. PDF怎么转换成Excel?推荐几个PDF转excel的方法
  3. linux安装mysql8⼀步⼀步超详细教程
  4. 用C语言计算手机的九宫格图案解锁总共能绘出多少种图案
  5. PyQt5 使用 webdings,Wingdings 字体来替代某些常用图片
  6. java食堂外卖系统,java毕业设计_springboot框架的饭堂外卖系统
  7. 原创 | 聊聊延迟满足
  8. mAPI(商户用API) v1.1发布
  9. 【C语言】PAT乙级1002 :写出这个数
  10. Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins:mav问题