Python 数据可视化
Seaborn 库 手册翻译
导语:
Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图。我在这里尽最大的努力对其进行翻译(统计狗也之前没看过英文计算机原著。。),方便大家进行查询~~~详细介绍可以看seaborn官方API和example gallery
一、风格管理
1、控制图片的美术风格
数据可视化能力是非常重要的。当你对数据集进行探索分析时,漂亮清晰的图表可以帮助你直观了解数据。数据可视化在你与客户的交流中也扮演着重要的角色,其形象化的帮助你传达数据本身的数量特征。从这个角度来讲做出引人注意的图表更是一项令人不可或缺的技术。
Matplotlib库本身具有高度订制化的能力。但也正因如此,学习如何调整、设定参数去画出漂亮的图表变得十分困难。面对这一问题,Seaborn库设计了大量的订制主题和一个高级编程接口用来控制matplotlib图像。 %matplotlib inline
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
np.random.seed(sum(map(ord, "aesthetics")))
让我们定义一个函数去画出一些偏置的正弦波(?-?),我们将在此基础上展示不同的风格参数的效果。
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)
如下便是matplotlib的默认效果。
sinplot()
运用set()函数将其转变为seaborn的默认风格。
sns.set()
sinplot()
(Note that in versions of seaborn prior to 0.8, set() was called on import. On later versions, it must be explicitly invoked).
Seaborn将matplotlib中的参数分为两个独立的部分。一部分负责设定图表的美术样式;另一部分负责缩放图表中的各种元素使之可以轻松的融入不同的上下文中。
我们用两对函数作为操纵这些参数的接口。运用axes_style()
和set_style()
函数控制风格;运用plotting_context
和set_context
函数缩放表内元素。对于这两组函数,每组中的首个会返回一个关于参数的字典,第二个会设定matplotlib的默认值。
Seaborn的图片样式
Seaborn中有5个预设的主题:darkgrid, whitegrid, dark, white, and ticks。他们各自适合于不同的应用和个人偏好,默认的样式为darkgrid。如同上文演示的,网格线赋予了图像直观表达数据数量特点的能力,灰地白线(darkgrid)将图像与网格线清晰的区分出来。白底灰线(whitegrid)也有同样效果,只不过更适合大量数据的作图。
sns.set_style("whitegrid")
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
sns.boxplot(data=data);
很多时候(尤其是当你主要想要利用图表来提供给人对于数据模式的印象),网格便不那么重要了。
sns.set_style("dark")
sinplot()
sns.set_style("white")
sinplot()
sns.set_style("ticks")
sinplot()
移除数轴线
样式white和ticks都可以通过去除上方和右方的数轴线来得到改善(当然不改也挺好)。这种操作可是不能通过调整matplotlib的参数来实现。但是你可以通过调用despine()
函数做到。
sinplot()
sns.despine()
将坐标轴远离图像可以使一些图像变得更加美观,这一操作也可以通过despine()
函数实现When the ticks don’t cover the whole range of the axis, the trim parameter will limit the range of the surviving spines.(当坐标轴不闭合时,trim参数将控制坐标轴可以覆盖数据的分布。??)offset参数控制坐标轴与图像之间的距离。
f, ax = plt.subplots()
sns.violinplot(data=data)
sns.despine(offset=10, trim=True);
你也可以通过调整despine()
中的参数来选择被移除掉的轴。
临时设定图像样式
尽管将样式调来调去并不困难(扯淡!!!),你依然可以在with语句中调用axes_style()
函数去暂时设定画图参数。这各功能允许你用不同的样式画图。
with sns.axes_style("darkgrid"):
plt.subplot(211)
sinplot()
plt.subplot(212)
sinplot(-1)
重载样式参数
你可以通过向axes_style()
和set_style()
函数中的rc参数传入字典的方式,对seaborn的样式进行定制。注意!通过这种方法,你仅仅只能重载那些关于样式的参数。(当然,对高级别set函数所做的改变作用于所有的图像)
如果你想查看当前参数的设定,你可以无参数的调用。便会返回参数设定情况。
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': [u'sans-serif'],
'font.sans-serif': [u'Arial',
u'DejaVu Sans',
u'Liberation Sans',
u'Bitstream Vera Sans',
u'sans-serif'],
'grid.color': '.8',
'grid.linestyle': u'-',
'image.cmap': u'rocket',
'legend.frameon': False,
'legend.numpoints': 1,
'legend.scatterpoints': 1,
'lines.solid_capstyle': u'round',
'text.color': '.15',
'xtick.color': '.15',
'xtick.direction': u'out',
'xtick.major.size': 0.0,
'xtick.minor.size': 0.0,
'ytick.color': '.15',
'ytick.direction': u'out',
'ytick.major.size': 0.0,
'ytick.minor.size': 0.0}
你可以给参数设定不同的版本。
sns.set_style("darkgrid", {"axes.facecolor": ".9"})
sinplot()
缩放图中元素
一组独立的参数用来控制图像的缩放。你可以用一行相同的代码来控制图像的缩放,使其适合不同的应用场景。
首先我们调用set
函数重设默认参数:
sns.set()
有四种预设的contexts,按相对大小排序:paper,notebook,talk和poster。notebook为默认值
sns.set_contest("paper")
sinplot()
sns.set_context("talk")
sinplot()
sns.set_context("poster")
sinplot()
Most of what you now know about the style functions should transfer to the context functions.
你可以将我们所提到的缩放样式传入set_context
并调用,当然也可以传入一个含有参数的字典重载各参数。
你也可以独立的缩放字体大小(仅在*的set
函数中可用)
sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
sinplot()
同样(虽然可能没啥用),你可以采用在with语句中调用的方法,进行暂时的缩放。
以上的功能可以快捷的在set
函数中实现,这个函数同样规定了默认的调色板。我们将在下一章对此进行说明。
我总结一下啊
- 两种基础操作figure styles和Scaling plot elements各有
set_style()
和set_context
两种set方法可以进行修改,另有两种with+方法进行暂时(对单个特别需求)进行操作。 -
despine()
可以对坐标轴进行操作。 -
set
函数,生命大和谐,*设定。 - 画图方法没变~~建立sub_plot +设定样式+画图指令。