Python Seaborn (1) 艺术化的图表控制

Python Seaborn (1) 艺术化的图表控制_第1张图片 Python Seaborn (1) 艺术化的图表控制_第2张图片 Python Seaborn (1) 艺术化的图表控制_第3张图片

作者: 未禾

数据猿官网 | www.datayuan.cn

640?wx_fmt=jpeg

今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区

640?wx_fmt=png

一直苦于没有系统学习seanborn的教程,似乎市面上也还没有完整的官方文档的学习资料。终于下决心用几天的时间通读下官方文档,并把记录下来。


基于官方0.71版本,所有代码和图片皆已验证,与官方结论不符的地方会进行标注。如果有翻译失当或理解有误的地方,敬请随意指正!(http://seaborn.pydata.org/tutorial.html)


一个引人入胜的图表非常重要,赏心悦目的图形不但能让数据探索中一些重要的细节更容易被挖掘,也能更有利于在与观众交流分析结果的过程中吸引观众的注意力并使观众们更容易记住结论。


Matplotlib无疑是高度可定制的,但快速实施出吸引人的细节就变得有些复杂。Seaborn作为一个带着定制主题和高级界面控制的Matplotlib扩展包,能让绘图变得更轻松,本部分主要介绍seaborn是如何对matplotlib输出的外观进行控制的。

Python Seaborn (1) 艺术化的图表控制_第4张图片

定义一个含偏移的正弦图像,来比较传统的matplotlib和seaborn的不同:

Python Seaborn (1) 艺术化的图表控制_第5张图片

使用matplotlib默认设置的图形效果:

Python Seaborn (1) 艺术化的图表控制_第6张图片

seaborn默认的灰色网格底色灵感来源于matplotlib却更加柔和。大多数情况下,图应优于表。seaborn的默认灰色网格底色避免了刺目的干扰,对于多个方面的图形尤其有用,是一些更复杂的工具的核心。


Seaborn将matplotlib参数分成两个独立的组。第一组设定了美学风格,第二组则是不同的度量元素,这样就可以很容易地添加到代码当中了。


操作这些参数的接口是两对函数。为了控制样式,使用axesstyle()和setstyle()函数。为了扩展绘图,请使用plotting_context()和set_context()函数。在这两种情况下,第一个函数返回一个参数字典,第二个函数则设置matplotlib默认属性。


样式控制:axes_style() and set_style()


有5个seaborn的主题,适用于不同的应用和人群偏好:


darkgrid 黑色网格(默认)

whitegrid 白色网格

dark 黑色背景

white 白色背景

ticks 应该是四周都有刻度线的白背景?


网格能够帮助我们查找图表中的定量信息,而灰色网格主题中的白线能避免影响数据的表现,白色网格主题则类似的,当然更适合表达“重数据元素”(heavy data elements不理解)

Python Seaborn (1) 艺术化的图表控制_第7张图片

对于许多场景,(特别是对于像对话这样的设置,您主要想使用图形来提供数据模式的印象),网格就不那么必要了。

Python Seaborn (1) 艺术化的图表控制_第8张图片

有时你可能想要给情节增加一点额外的结构,这就是ticks参数的用途:

Python Seaborn (1) 艺术化的图表控制_第9张图片

特别的可以通过sns.axes_style(style=None, rc=None) 返回一个sns.set_style()可传的参数的字典。


通过类似sns.set_style("ticks", {"xtick.major.size": 8, "ytick.major.size": 8})的方式写入更具体的配置样式。


关于sns.axes_style()下面会有说明和运行结果。


用despine()进行边框控制


white和ticks参数的样式,都可以删除上方和右方坐标轴上不需要的边框,这在matplotlib中是无法通过参数实现的,却可以在seaborn中通过despine()函数轻松移除他们。

Python Seaborn (1) 艺术化的图表控制_第10张图片

一些图的边框可以通过数据移位,当然调用despine()也能做同样的事。当边框没有覆盖整个数据轴的范围的时候,trim参数会限制留存的边框范围。

Python Seaborn (1) 艺术化的图表控制_第11张图片

你也可以通过往despine()中添加参数去控制边框。

Python Seaborn (1) 艺术化的图表控制_第12张图片

despine(fig=None, ax=None, top=True, right=True, left=False, bottom=False, offset=None, trim=False)


从plot()函数中移除顶部或右边的边框。


临时设定图形样式

虽然来回切换非常容易,但sns也允许用with语句中套用axes_style()达到临时设置参数的效果(仅对with块内的绘图函数起作用)。这也允许创建不同风格的坐标轴。

Python Seaborn (1) 艺术化的图表控制_第13张图片


seaborn样式中最重要的元素

如果您想要定制seanborn的样式,可以将参数字典传递给axes_style()和set_style()的rc参数。注意,只能通过该方法覆盖样式定义的一部分参数。(然而,更高层次的set()函数接受任何matplotlib参数的字典)。


如果您想要查看包含哪些参数,您可以只调用该函数而不带参数,这将返回当前设置的字典:

Python Seaborn (1) 艺术化的图表控制_第14张图片

或许,你可以试试不同种类的参数效果。

Python Seaborn (1) 艺术化的图表控制_第15张图片


通过 plotting_context() 和 set_context() 调整绘图元素


另一组参数控制绘图元素的规模,这应该让您使用相同的代码来制作适合在较大或较小的情节适当的场景中使用的情节。


首先,可以通过sns.set()重置参数。

640?wx_fmt=png

四种预设,按相对尺寸的顺序(线条越来越粗),分别是paper,notebook, talk, and poster。notebook的样式是默认的,上面的绘图都是使用默认的notebook预设。

Python Seaborn (1) 艺术化的图表控制_第16张图片 Python Seaborn (1) 艺术化的图表控制_第17张图片 Python Seaborn (1) 艺术化的图表控制_第18张图片 Python Seaborn (1) 艺术化的图表控制_第19张图片

通过观察各种样式的结果,你应当可以了解context函数。


类似的,还可以使用其中一个名称来调用set_context()来设置参数,您可以通过提供参数值的字典来覆盖参数。


通过更改context还可以独立地扩展字体元素的大小。(这个选项也可以通过顶级set()函数获得)。

Python Seaborn (1) 艺术化的图表控制_第20张图片

类似地(尽管它可能用处不大),也可以使用with嵌套语句进行临时的设置。


样式和上下文都可以用set()函数快速地进行配置。这个函数还设置了默认的颜色选项,在下一节将详细介绍这一功能。


本文作者 未禾,首发于作者知乎,https://zhuanlan.zhihu.com/p/27435863,已获首发平台授权原创形式发布。


数据猿读者亲启:


名企&大佬专访精选

向下滑动启阅

以下文字均可点击阅读原文


跨国外企:

谷歌大中华及韩国区数据洞察与解决方案总经理郭志明丨 IBM中国区开发中心总经理吉燕勇丨微软中国CTO官韦青丨前微软中国CTO黎江丨VMware中国区研发中心总经理任道远


中国名企:

联想集团副总裁田日辉丨首汽租车COO 魏东

阿里巴巴数据经济研究中心秘书长潘永花

搜狗大数据研究院院长李刚丨易观CTO郭炜

前上海证券交易所副总裁兼CTO白硕携程商旅亚太区CMO 邱斐丨艾瑞集团CTO郝欣诚丨泰康集团大数据部总经理周雄志丨上海链家研究院院长陈泽帅丨蓝色光标首席数据科学家王炼


知名学者:

北大新媒体研究院副院长刘德寰丨中科院基因研究所方向东

 

创业明星:

地平线机器人创始人兼CEO余凯丨天工科仪董事长王世金丨ZRobot CEO乔杨丨天眼查创始人兼CEO柳超丨第四范式联合创始人兼首席架构师胡时伟天云大数据CEO雷涛丨Kyligence联合创始人兼CEO韩卿丨数之联创始人兼CEO周涛丨明略数据董事长吴明辉丨91征信创始人兼CEO 薛本川丨智铀科技创始人、CEO及首席科学家夏粉丨易宝支付联合创始人兼总裁余晨海云数据创始人兼CEO冯一村丨星环科技COO佘晖丨碳云智能联合创始人兼首席科学家李英睿

 

知名投资人:

前IDG创始合伙人、火山石资本创始人章苏阳

华创资本合伙人熊伟铭丨六禾创投总裁王烨

信天创投合伙人蒋宇捷青域基金执行总裁牟颖

蓝驰创投合伙人朱天宇


——数据猿专访部


(可上下滑动启阅)






Python Seaborn (1) 艺术化的图表控制_第21张图片 640?wx_fmt=gif


▲向上滑动


采访/报道/投稿

Python Seaborn (1) 艺术化的图表控制_第22张图片

[email protected]


商务合作

Python Seaborn (1) 艺术化的图表控制_第23张图片

18600591561(微信)



长按右方二维码

关注我们ˉ►


Python Seaborn (1) 艺术化的图表控制_第24张图片

你可能感兴趣的:(Python Seaborn (1) 艺术化的图表控制)