Python数据分析之Seaborn(样式风格)
Seaborn简介
Seaborn
是一种基于matplotlib
的图形可视化python库。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。Seaborn
其实是在matplotlib
的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用Seaborn
就能做出很具有吸引力的图,而使用matplotlib
就能制作具有更多特色的图。应该把Seaborn
视为matplotlib
的补充,而不是替代物。同时它能高度兼容numpy
与pandas
数据结构以及scipy
与statsmodels
等统计模式。掌握Seaborn
能很大程度帮助我们更高效的观察数据与图表,并且更加深入了解它们。
其有如下特点:
- 基于matplotlib aesthetics绘图风格,增加了一些绘图模式
- 增加调色板功能,利用色彩丰富的图像揭示您数据中的模式
- 运用数据子集绘制与比较单变量和双变量分布的功能
- 运用聚类算法可视化矩阵数据
- 灵活运用处理时间序列数据
- 利用网格建立复杂图像集
Seaborn样式
matplotlib与seaborn绘图比较
import seaborn as sns
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
def sinplot(flip=1):
x = np.linspace(0, 14, 100)
for i in range(1, 7):
plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
sinplot() #采用matplotlib绘制
sns.set() #采用seaborn默认设置
sinplot()
Seaborn 5种主题风格
- darkgrid
- whitegrid
- dark
- white
- ticks
sns.set_style("darkgrid")
sinplot()
sns.set_style("whitegrid")
sinplot()
sns.set_style("dark")
sinplot()
sns.set_style("white")
sinplot()
sns.set_style("ticks")
sinplot()
用despine()移除轴线
样式white
和ticks
都可以通过去除上方和右方不必要的轴线来得到改善. 而这些是不可能在matplotlib
里设置参数做到的,但是你可以调用seaborn的函数despine()
来去除轴线:
sns.set_style("ticks")
sinplot()
sns.despine() # 去除上面与右面轴线
有些布局也可以通过调整轴线距数据的偏移来改善,这也能在despine()里完成.当ticks不能覆盖轴线的整个范围时,trim参数可以限制显示的轴线的范围.
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2 # (20, 6) 二维数据
f, ax = plt.subplots()
sns.violinplot(data) # 琴形图
sns.despine(offset=10,trim=True)
你也可能通过设置另外的参数来控制移除哪条轴线:
sns.set_style("whitegrid")
sns.boxplot(data=data, palette="deep") #箱型图
sns.despine(left=True) #去除左边的轴线
临时设置图表样式
尽管来回切换样式是很简单的,但是你也可以在with
语句里用axes_style()
函数来临时设置控制布局的参数.这也允许你用不同的风格来制作图表,这是一种常见的编程模式,使得控制样式和风格能够多变。
with sns.axes_style("darkgrid"):
plt.subplot(211)
sinplot()
plt.subplot(212)
sinplot(-1)
重载seaborn样式的元素
如果你想要自定义seaborn
的样式,你可以用词典(dictionary
)将一系列控制参数赋值给axes_style()
函数和set_style()
函数的rc
参数里. 注意你只能通过这种方式重载样式定义的部分.(但是,更高级的set()
函数可以处理包含任意matplotlib
参数的词典)
如果你想要知道都包含了哪些参数,你可以调用没有参数的函数,它会返回当前设置:
sns.axes_style()
{'axes.axisbelow': True,
'axes.edgecolor': '.8',
'axes.facecolor': 'white',
'axes.grid': True,
'axes.labelcolor': '.15',
'axes.linewidth': 1.0,
'figure.facecolor': 'white',
'font.family': ['sans-serif'],
'font.sans-serif': ['Arial',
'DejaVu Sans',
'Liberation Sans',
'Bitstream Vera Sans',
'sans-serif'],
'grid.color': '.8',
'grid.linestyle': '-',
'image.cmap': 'rocket',
'legend.frameon': False,
'legend.numpoints': 1,
'legend.scatterpoints': 1,
'lines.solid_capstyle': 'round',
'text.color': '.15',
'xtick.color': '.15',
'xtick.direction': 'out',
'xtick.major.size': 0.0,
'xtick.minor.size': 0.0,
'ytick.color': '.15',
'ytick.direction': 'out',
'ytick.major.size': 0.0,
'ytick.minor.size': 0.0}
然后你可以设置这些参数的不同版本:
sns.set_style("darkgrid", {"axes.facecolor": ".9"})
sinplot()
使用plotting_context()
和set_context()
设置布局元素的规模
布局元素的规模被独立的参数集合控制,这能让你使用相同的代码得到不同大小的规模合适的布局
首先让我们重新调用set()
函数得到缺省设置:
sns.set()
有4种预设好的上下文(context),按相对大小排序分别是:paper
, notebook
, talk
,和poster
.缺省的规模是notebook
,上述的所有图表都是它.
sns.set_context("paper")
plt.figure(figsize=(8, 6))
sinplot()
sns.set_context("talk")
plt.figure(figsize=(8, 6))
sinplot()
sns.set_context("poster")
plt.figure(figsize=(8, 6))
sinplot()
大部分你现在所稽首的样式函数都应该被转换成上下文函数.
你可以调用set_context()
,将上下文的名字当作一个参数传入,然后你就可以通过提供一个写有各项设置值的词典重载上下文的参数。
在修改上下文时,你也可以单独修改字体大小。(更高级的set()
里也可以这么做)
sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
sinplot()
参考
[Style functions]http://seaborn.pydata.org/tutorial/aesthetics.html#aesthetics-tutorial
[Color palettes]http://seaborn.pydata.org/tutorial/color_palettes.html#palette-tutorial
[Distribution plots]http://seaborn.pydata.org/tutorial/distributions.html#distribution-tutorial
[Categorical plots]http://seaborn.pydata.org/tutorial/categorical.html#categorical-tutorial
[Regression plots]http://seaborn.pydata.org/tutorial/regression.html#regression-tutorial
[Axis grid objects]http://seaborn.pydata.org/tutorial/axis_grids.html#grid-tutorial [10分钟python图表绘制]https://zhuanlan.zhihu.com/p/24464836
- android之service
- aFinal框架
- 朴素贝叶斯模型(NBM)详解与在Matlab和Python里的具体应用
- android客户端和服务端js交互
- 【实验手册】使用Visual Studio Code 开发.NET Core应用程序
- android调用服务端的js
- 保存数据返回后可以继续编辑
- 深度学习Matlab工具箱代码详解概览
- android读取sd卡图片并进行缩放操作
- 深度学习Matlab工具箱代码注释之cnnapplygrads.m
- android异步操作
- 深度学习Matlab工具箱代码注释之cnnbp.m
- 仿大众点评悬浮购买框效果
- 深度学习Matlab工具箱代码注释之cnnff.m
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 数据库PostrageSQL-从源代码安装
- Django的中间件
- WPF 使用 Skia 绘制 WriteableBitmap 图片
- dotnet 在 UOS 国产系统上使用 MonoDevelop 创建 GTK 全平台带界面应用
- dotnet 在 UOS 国产系统上安装 MonoDevelop 开发工具
- 使用SAP Spartacus快速创建一个电商店铺网站
- 使用StackBlitz和SAP Spartacus快速创建电商店铺页面
- SAP CRM Interactive Report(交互式报表)里和服务订单相关的一些字段
- SAP S/4HANA Customer Management(CRM)模块的扩展性设计
- SAP S/4HANA Customer Management(CRM)模块的Partner模型设计
- 使用soapUI消费SAP Cloud for Customer的web service
- 视频上云网关EasyNTS智能云组网如何通过23端口穿透实现远程控制功能?
- 视频上云网关平台EasyCVR登录页开发控制台报net::ERR_CONNECTION_TIMED_OUT错误
- 视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——开启存储服务
- 设计模式~责任链模式