【seaborn】(1) 数据可视化,绘图风格、布局

各位同学好,今天和大家分享一下如何使用 seaborn 库进行数据可视化。在 matplotlib 的基础上进一步美化绘图。主要内容有:默认风格 sns.set(), 主题风格 sns.set_style(), 边框控制 sns.despine(),  局部图表风格 axes_style(), 绘图样式设置 sns.set_context()


1. 默认风格设置 sns.set()

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# matplot绘制正弦函数
x = np.linspace(0, 14, 100)  # 在0-14之间取出100个点

# 绘制5条正弦线
plt.figure()
for i in range(5):
    plt.plot(x, np.sin(x+i*0.5)*(7-i))

# 设置绘图画风组合,调用seaborn的模板库
plt.figure()
sns.set()  # 使用seaborn默认的绘图风格
for i in range(5):
    plt.plot(x, np.sin(x+i*0.5)*(7-i))

左图为原始曲线,右图为设置画风后的曲线

 


2. 主题风格 sns.set_style()

seaborn 库提供了五种绘图风格,分别是:darkgrid(灰色网格),whitegrid(白色网格),dark(深色),white(白色),ticks(刻度线段)

在绘图之前,先指定图像的主题风格,sns.set_style( 'darkgrid' ),如下。

plt.figure()  # 新建画图板
sns.set_style('darkgrid')  # 设置风格
data = np.random.normal(size=(20,6)) + np.arange(6)/2 # 自定义数据
sns.boxplot(data=data) # 绘制盒图
plt.title('darkgrid')  # 设置标题

接下来绘制其他四种主题风格

fig = plt.figure(figsize=(10,8))  # 创建新画板
styleList = ['whitegrid', 'dark', 'white', 'ticks']  # 设置其他几种风格

# 循环绘制其他几种风格
for i, style in enumerate(styleList):
    
    sns.set_style(style)  # 先设置风格
    plt.subplot(2,2,i+1)  # 再指定当前图的位置
    data = np.random.normal(size=(20,6)) + np.arange(6)/2 # 自定义数据
    sns.boxplot(data=data) # 绘制盒图
    plt.title(style)  # 设置标题
    
fig.tight_layout()  #自动调节布局重叠问题 


3. 函数 despine() 控制边框

3.1 删除上侧和右侧边框 sns.despine()

设置绘图的主题风格为 ticks,即每个坐标轴都有刻度线段,如上图中的右下图。通过 sns.despine() 删除图像上的上侧和右侧的坐标轴线。

#(3)去除绘图框上边缘和右边缘的刻度线
plt.figure(figsize=(10,5))  # 新建画板
x = np.linspace(0, 14, 100)  # 设置x轴,0-14之间取100个数
sns.set_style('ticks')   # 设置绘图风格

# 绘制五条正弦曲线
for i in range(5):
    plt.plot(x, np.sin(x+i*0.5)*(7-i))
# 删除上侧和右侧边缘线
sns.despine()
# 设置标题
plt.title('despine')


3.2 边框位移 sns.despine(offset, trim)

使用 sns.despine(offset, trim) 函数完成边框位移,其中参数: offset 代表x和y坐标轴偏移量trim=False 代表坐标轴没有限制; trim=True 将坐标轴限制在数据最大最小值之间

如下,通过设置 sns.despine(offset=50, trim=True) ,使图像距离x轴和y轴的距离都是50,而x轴的坐标轴刻度范围是从0到14,y轴的坐标轴刻度范围是从-6到6

# 设置x轴刻度
x = np.linspace(0, 14, 100) # 在0-14之间取出100个点
fig = plt.figure() # 新建画图板

plt.subplot(2,1,1) # 绘图位置
# 移动坐标后的曲线
for i in range(5):
    plt.plot(x, np.cos(x+i*0.5)*(7-i))
# 移动轴线
sns.despine(offset=50, trim=True)  # 图像与x轴和y轴之间的距离
# 设置标题
plt.title('trim=True')

plt.subplot(2,1,2) # 绘图位置
# 移动坐标后的曲线
for i in range(5):
    plt.plot(x, np.cos(x+i*0.5)*(7-i))
# 移动轴线
sns.despine(offset=50)  # 图像与x轴和y轴之间的距离
# 设置标题
plt.title('trim=False')

fig.tight_layout()  #轻量化布局


3.3 自定义隐藏边框 sns.despine(right, left, top, bottom) 

使用 sns.despine() 默认参数可以隐藏图像的上侧和右侧的边缘框,如果想自定义隐藏边界框,可以设置参数,sns.despine(right=True, left=False, top=True, bottom=False) 同样能实现隐藏上侧和右侧边界框

sns.set_style('ticks')  # 设置风格
data = np.random.normal(size=(20,6)) + np.arange(6)/2 # 自定义数据

plt.figure()  # 绘制原始图
sns.boxplot(data=data) # 绘制盒图
plt.title('origin')  # 设置标题

plt.figure()  # 绘制原始图
sns.boxplot(data=data) # 绘制盒图
sns.despine(right=True, left=True, top=False, bottom=False)  # 隐藏上边缘和左边缘的刻度线
plt.title('despined')  # 设置标题

第一张为风格为ticks的原图,第二张为隐藏左侧和右侧边框后的图


4. 局部图表风格 axes_style() 

axes_style() 设置局部图表风格和 with 函数配合的用法,在当前 with 域中使用指定的图像的风格,在 with 域外可以使用其他风格。

如下,以 with 域作为分隔,with域内的绘图使用 'darkgrid' 风格,而 with 域外的绘图使用 'whitegrid' 的风格

fig = plt.figure() # 新建画板
x = np.linspace(0, 14, 100) # 设置x轴刻度

# 使用with打开一种风格,在with里面执行的都是该风格
with sns.axes_style('darkgrid'):  # 指定风格
    plt.subplot(2,1,1)  # 绘图位置
    # 绘制正弦曲线
    for i in range(5):
        plt.plot(x, np.sin(x+i*0.5)*(7-i))
        # 设置标题
    plt.title('darkgrid')

# with域外部绘图就是另外一种风格
sns.axes_style('whitegrid') 
plt.subplot(2,1,2)  # 绘图位置
# 绘制正弦曲线
for i in range(5):
    plt.plot(x, np.sin(x+i*0.5)*(7-i))
    # 设置标题
plt.title('darkgrid')

fig.tight_layout()  #轻量化布局


5. 绘图样式设置 sns.set_context()

 如果想要定制 seanborn 的样式,可以参数字典传递给 axes_style() set_style() rc 参数。通过 sns.axes_style() 查看当前绘图的格式参数设置。

sns.axes_style()
# 返回结果
'''
{'axes.facecolor': 'white',
 'axes.edgecolor': '.15',
 'axes.grid': False,
 'axes.axisbelow': True,
 'axes.labelcolor': '.15',
 'figure.facecolor': 'white',
 'grid.color': '.8',
 'grid.linestyle': '-',
 'text.color': '.15',
 'xtick.color': '.15',
 'ytick.color': '.15',
 'xtick.direction': 'out',
 'ytick.direction': 'out',
 'lines.solid_capstyle': 'round',
 'patch.edgecolor': 'w',
 'patch.force_edgecolor': True,
 'image.cmap': 'rocket',
 'font.family': ['sans-serif'],
 'font.sans-serif': ['Arial',
  'DejaVu Sans',
  'Liberation Sans',
  'Bitstream Vera Sans',
  'sans-serif'],
 'xtick.bottom': True,
 'xtick.top': False,
 'ytick.left': True,
 'ytick.right': False,
 'axes.spines.left': True,
 'axes.spines.bottom': True,
 'axes.spines.right': True,
 'axes.spines.top': True}
'''

接下来就可以根据自己的需要来修改这些绘图样式参数。

sns.set_context(context, font_scale=1, rc=None)  

其中,context 代表图像大小,选项有 [ 'paper', 'talk', 'poster', 'notebook' ]font_scale 代表字体大小 rc 代表绘图样式参数

plt.figure()  # 创建画板
x = np.linspace(0, 14, 100) # 在0-14之间取出100个点
# 设置布局格式, 字体大小, 线条粗细
sns.set_context('paper')  
# 绘制正弦曲线
for i in range(5):
    plt.plot(x, np.sin(x+i*0.5)*(7-i))
    # 设置标题
plt.title('original paper style')

# 在paper风格基础上编辑
plt.figure()  # 创建画板
# 设置布局格式, 字体大小, 线条粗细
sns.set_context('paper', font_scale=3, rc={'lines.linewidth':3})  
# 绘制正弦曲线
for i in range(5):
    plt.plot(x, np.sin(x+i*0.5)*(7-i))
    # 设置标题
plt.title('changed paper style')

左图为原图正弦曲线,右图为更改样式后的曲线

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立Sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值