1 引言¶
在两年前,写了一些列关于matplotlib数据可视化的博客,matplotlib可定制化程度高、功能强大,但不得不说,作图过程也是十分繁琐,需要配置的参数众多。在探索数据时,我们更希望的是将工作中心集中在数据本身,通过简单的代码实现数据可视化,而不是可视化绘图本身。所以需要一个更高层次的库,对matplotlib进行分组,实现简单作图,这个库就是seaborn。
Seaborn是一个在Python中制作有吸引力和信息丰富的统计图形的库。它建立在matplotlib之上,并与PyData堆栈紧密集成,包括支持来自scipy和statsmodels的numpy和pandas数据结构和统计例程。 Seaborn旨在将可视化作为探索和理解数据的核心部分。绘图函数对包含整个数据集的数据框和数组进行操作,并在内部执行必要的聚合和统计模型拟合以生成信息图。如果matplotlib“试图让事情变得简单容易和难以实现”,seaborn会试图使一套明确的方案让事情变得容易。 Seaborn可以认为是对matplotlib的补充,而不是它的替代品。在数据可视化方面能够很好的表现。
2 seaborn自带数据集¶
In [1]:import seaborn as sns import matplotlib as plt plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签 plt.rcParams['axes.unicode_minus']=False #这两行需要手动设置
seaborn本身提供一些数据库,用于seaborn学习使用,通过sns.get_dataset_names()
可以查看seaborn所支持的数据库。(注意,seaborn查看数据和加载数据都需要访问外网,速度较慢)
sns.get_dataset_names()Out[4]:
['anagrams', 'anscombe', 'attention', 'brain_networks', 'car_crashes', 'diamonds', 'dots', 'exercise', 'flights', 'fmri', 'gammas', 'geyser', 'iris', 'mpg', 'penguins', 'planets', 'taxis', 'tips', 'titanic']
通过sns.load_dataset()
方法指定数据集名称可以加载数据,如下所示为加载“tips”数据集。加载出来的数据以pandas中DataFrame对象实例保存。
df = sns.load_dataset("tips")In [23]:
type(df)Out[23]:
pandas.core.frame.DataFrameIn [24]:
df.head(2)Out[24]:
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
3 主题风格¶
相较于matplotlib,一个显著有点就是seaborn提供多种美观大方的外观主题。通过sns.set_theme()方法,可以对图像主题等等外观进行设置。sns.set_theme()方法包含参数如下:
- style:坐标轴、刻度样式
- context:控制
- palette:调色板
- font:字体
- rcdict:自定义参数对上述各参数的配置进行覆盖
本文先对较为常用的style和context进行说明:
3.1 style¶
3.1.1 自定义style风格¶
style可以传递一个dict对象,对坐标轴各项参数进行配置:
In [66]:style = {'figure.facecolor': 'grey', 'axes.labelcolor': '.15', 'xtick.direction': 'out', 'ytick.direction': 'out', 'xtick.color': '.15', 'ytick.color': '.15', 'axes.axisbelow': True, 'grid.linestyle': '-', 'text.color': '.15', 'font.family': ['sans-serif'], 'font.sans-serif': ['Arial', 'DejaVu Sans', 'Liberation Sans', 'Bitstream Vera Sans', 'sans-serif'], 'lines.solid_capstyle': 'round', 'patch.edgecolor': 'w', 'patch.force_edgecolor': True, 'image.cmap': 'rocket', 'xtick.top': False, 'ytick.right': False, 'axes.grid': True, 'axes.facecolor': '#EAEAF2', 'axes.edgecolor': 'white', 'grid.color': 'white', 'axes.spines.left': True, 'axes.spines.bottom': True, 'axes.spines.right': True, 'axes.spines.top': True, 'xtick.bottom': False, 'ytick.left': False}In [67]:
sns.set_theme(style=style) _ = sns.relplot(x="total_bill", y="tip", data=df)
style也可以传递几个seaborn实现提供好的字符串参数,自带5种主题风格:
- darkgrid(默认值)
- whitegrid
- dark
- white
- ticks
3.1.2 darkgrid¶
In [51]:sns.set_theme(style='darkgrid') _ = sns.relplot(x="total_bill", y="tip", data=df)
3.1.3 whitegrid¶
In [52]:sns.set_theme(style='whitegrid') _ = sns.relplot(x="total_bill", y="tip", data=df)
3.1.4 dark¶
In [53]:sns.set_theme(style='dark') _ = sns.relplot(x="total_bill", y="tip", data=df)
3.1.5 white¶
In [54]:sns.set_theme(style='white') _ = sns.relplot(x="total_bill", y="tip", data=df)
3.1.6 ticks¶
In [55]:sns.set_theme(style='ticks') _ = sns.relplot(x="total_bill", y="tip", data=df)
3.2 context¶
3.2.1 自定义context¶
context可以对标签、线条和绘图的其他元素的大小进行配置。
In [ ]:context = {'font.size': 15.0, 'axes.labelsize': 'medium', 'axes.titlesize': 'large', 'xtick.labelsize': 'medium', 'ytick.labelsize': 'medium', 'legend.fontsize': 'medium', 'axes.linewidth': 0.8, 'grid.linewidth': 0.8, 'lines.linewidth': 1.5, 'lines.markersize': 6.0, 'patch.linewidth': 1.0, 'xtick.major.width': 0.8, 'ytick.major.width': 0.8, 'xtick.minor.width': 0.6, 'ytick.minor.width': 0.6, 'xtick.major.size': 3.5, 'ytick.major.size': 3.5, 'xtick.minor.size': 2.0, 'ytick.minor.size': 2.0, 'legend.title_fontsize': None}In [47]:
sns.set_theme(context=context) _ = sns.relplot(x="total_bill", y="tip", data=df)
并不是每次对context进行设置都要传递一个dict对每一个图形属性进行配置,为方便使用,在seaborn提供几种默认的context选项,包括:
3.2.2 notebook(默认值)¶
In [48]:sns.set_theme(context='notebook') _ = sns.relplot(x="total_bill", y="tip", data=df)
3.2.3 paper¶
In [34]:sns.set_theme(context='paper') _ = sns.relplot(x="total_bill", y="tip", data=df)
3.2.4 talk¶
In [36]:sns.set_theme(context='talk') _ = sns.relplot(x="total_bill", y="tip", data=df)
3.2.5 poster¶
In [37]:sns.set_theme(context='poster') _ = sns.relplot(x="total_bill", y="tip", data=df)In [104]:
sns.set_theme(palette="husl") sns.color_palette("husl", 6) # sns.color_palette("flare", as_cmap=True) # sns.set_theme(palette=sns.color_palette("pastel")) _ = sns.relplot(x="total_bill", y="tip", hue='size', data=df, palette='Spectral')
4 seaborn框架结构¶
seaborn将主要绘图功能方法分为图级和轴级两个层次,如下图所示。图级方法包括relplot、displot、catplot,下属分别包含对应的特定图表绘制函数,即轴级方法。后续博客将围绕三个图级方法逐个介绍各种绘图方法。