Seaborn Tutorial
Introduction
在数据分析中,画图极为重要。在分析过程中以及最后的分析结果中都需要利用直观的图表去分析,展示数据特点,以便挖掘出有价值的信息。
因为我是用Python分析数据,那么matplotlib必不可少,然而自己太懒,matplotlib细节太多,一时没法完全掌握。Seaborn看起来是个不错的选择,它基于matplotlib,
但是做了更高层次的封装,学起来会简单很多,所以我把它当做绘图入门的工具。
我打算做一个Seaborn文档的笔记,然后再附一两篇实际应用的案例来完成我的Seaborn入门之旅。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.style.use({'figure.figsize':(12, 8)})
接下来画一些正弦函数来看一下Seaborn的基本参数:
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的样式:
print(plt.style.available)
['bmh', 'classic', 'dark_background', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', '_classic_test']
可以看到,Seaborn的样式已经嵌入其中。我们将样式设置为Seaborn:
sns.set()
sinplot()
Seaborn将matplotlib的参数分为两个部分,一控制样式,一控制图中各种元素显示的比例。
Seaborn figure styles
plt.style.available
['bmh',
'classic',
'dark_background',
'fivethirtyeight',
'ggplot',
'grayscale',
'seaborn-bright',
'seaborn-colorblind',
'seaborn-dark-palette',
'seaborn-dark',
'seaborn-darkgrid',
'seaborn-deep',
'seaborn-muted',
'seaborn-notebook',
'seaborn-paper',
'seaborn-pastel',
'seaborn-poster',
'seaborn-talk',
'seaborn-ticks',
'seaborn-white',
'seaborn-whitegrid',
'seaborn',
'_classic_test']
Matplotlib已经嵌入了 Seaborn样式,尝试一下不同的样式:
data = np.random.normal(size=(20, 6))
sns.set_style('whitegrid')
sns.boxplot(data=data)
<matplotlib.axes._subplots.AxesSubplot at 0x1fbc03d6780>
sns.set_style('dark')
sinplot()
sns.set_style('white')
sinplot()
sns.set_style('ticks')
sinplot()
Remove axes spines
有时候我们会去掉box的上轴和右轴:
sinplot()
sns.despine()
当然你也可以:
sns.set_style('white')
sinplot()
sns.despine(left=True, bottom=True)
sns.despine()函数默认删除右轴和上轴。
f, ax = plt.subplots()
sns.violinplot(data=data)
<matplotlib.axes._subplots.AxesSubplot at 0x1fbc05bdc18>
f, ax = plt.subplots()
sns.violinplot(data=data)
sns.despine(trim=True)
Temporarily setting figure style
我们可以临时定义作图参数让子图拥有不同的样式:
with sns.axes_style('darkgrid'):
plt.subplot(211)
sinplot()
plt.subplot(212)
sinplot(-1)
这样,我们就临时调用了‘darkgrid‘样式。
Overriding elements of the seaborn styles
我们可以看看Seaborn的默认样式参数:
sns.axes_style()
{'axes.axisbelow': True,
'axes.edgecolor': '.15',
'axes.facecolor': 'white',
'axes.grid': False,
'axes.labelcolor': '.15',
'axes.linewidth': 1.25,
'figure.facecolor': 'white',
'font.family': ['sans-serif'],
'font.sans-serif': ['Arial',
'Liberation Sans',
'Bitstream Vera Sans',
'sans-serif'],
'grid.color': '.8',
'grid.linestyle': '-',
'image.cmap': 'Greys',
'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}
它是一个字典,我们可以自己定义值:
sinplot()
sns.set_style({'axes.facecolor':'.9'})
sinplot()
其他参数也可以修改。
Scaling plot elements
接下来是修改图的元素比例,包括线条大小,坐标大小等等。
sns.set()
Seaborn预设了四种比例,根据大小依次为 paper
, notebook
, talk
和 poster
。默认为 notebook
。
sns.plotting_context()
{'axes.labelsize': 11.0,
'axes.titlesize': 12.0,
'figure.figsize': [8.0, 5.5],
'font.size': 12.0,
'grid.linewidth': 1.0,
'legend.fontsize': 10.0,
'lines.linewidth': 1.75,
'lines.markeredgewidth': 0.0,
'lines.markersize': 7.0,
'patch.linewidth': 0.3,
'xtick.labelsize': 10.0,
'xtick.major.pad': 7.0,
'xtick.major.width': 1.0,
'xtick.minor.width': 0.5,
'ytick.labelsize': 10.0,
'ytick.major.pad': 7.0,
'ytick.major.width': 1.0,
'ytick.minor.width': 0.5}
可以看到默认的元素大小。
sinplot()
sns.set_context('talk')
sinplot()
sns.set_context("poster")
sinplot()
同样的,可以利用 sns.set_context()
来设置sns.plotting_context()
中的值。
zxzhu 2018/3/30