Fork me on GitHub

seaborn学习笔记(一):seanborn初识

 

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查看数据和加载数据都需要访问外网,速度较慢)

In [4]:
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对象实例保存。

In [22]:
df = sns.load_dataset("tips")
In [23]:
type(df)
Out[23]:
pandas.core.frame.DataFrame
In [24]:
df.head(2)
Out[24]:
 
 total_billtipsexsmokerdaytimesize
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,下属分别包含对应的特定图表绘制函数,即轴级方法。后续博客将围绕三个图级方法逐个介绍各种绘图方法。

 

202a9279edba87d6113061b2ad62429.jpg

posted @ 2022-02-23 09:16  奥辰  阅读(715)  评论(0编辑  收藏  举报