pythonic生物人

Python seaborn细节篇-比例尺度context

本文分享Python seaborn中通过比例尺度context美化图形。

比例尺度(context),用于设置the scaling of plot elements ,例如,图中文字大小、标记marker大小、线条宽度等。不理解,没关系,下面依次举例详细介绍。

5.1 context设置图形比例尺度

5.1.1 plotting_context查看context内容

一张图的context包含的内容可通过plotting_context()查看,

sns.plotting_context()
{
    'font.size': 12.0,             # 字体大小
    'axes.labelsize': 12.0,        # 坐标轴标签大小
    'axes.titlesize': 12.0,        # 坐标轴标题大小
    'xtick.labelsize': 11.0,       # x轴刻度标签大小
    'ytick.labelsize': 11.0,       # y轴刻度标签大小
    'legend.fontsize': 11.0,       # 图例字体大小
    'legend.title_fontsize': 12.0, # 图例标题字体大小
    'axes.linewidth': 1.25,        # 坐标轴线宽度
    'grid.linewidth': 1.0,         # 网格线宽度
    'lines.linewidth': 1.5,        # 线条宽度
    'lines.markersize': 6.0,       # 线条标记大小
    'patch.linewidth': 1.0,        # 图形patch线宽度
    'xtick.major.width': 1.25,     # x轴主刻度线宽度
    'ytick.major.width': 1.25,     # y轴主刻度线宽度
    'xtick.minor.width': 1.0,      # x轴次刻度线宽度
    'ytick.minor.width': 1.0,      # y轴次刻度线宽度
    'xtick.major.size': 6.0,       # x轴主刻度线长度
    'ytick.major.size': 6.0,       # y轴主刻度线长度
    'xtick.minor.size': 4.0,       # x轴次刻度线长度
    'ytick.minor.size': 4.0        # y轴次刻度线长度
}

从以上可知,context中包含图形的各种属性,比如字体大小、线条宽度等等。

5.1.2 set_context设置context内容

set_context()可设置context,但不会改变图表整体样式。seanborn内置了四套context设置,分别为paper, notebook, talk, poster,下面展示一下效果,

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 8))

contexts = ['notebook', 'paper', 'talk', 'poster']
for i, context in enumerate(contexts):
    sns.set_context(context)  #设置context
    plt.subplot(2, 2, i + 1)
    sns.lineplot(x=[1, 2, 3, 4], y=[3, 2, 5, 1], color="#b1283a")
    plt.title(f"context: \"{context}\"", color="#006a8e")

plt.tight_layout()
plt.show()


上图可清晰的展示context变化,图形中字体、线宽等属性的变化。在使用某款已经内置的context方案的同时,还可以通过rc单独设置5.1.1中的任意参数,

import seaborn as sns
import matplotlib.pyplot as plt

#痛过rc独立设置xtick.labelsize
sns.set_context('poster', rc={"xtick.labelsize": 50})  
sns.lineplot(x=[1, 2, 3, 4], y=[3, 2, 5, 1], color="#b1283a")


此外,可通过 font_scale 设置整个图的字体缩放,
import seaborn as sns
import matplotlib.pyplot as plt

#通过font_scale设置整个图的字体缩放
sns.set_context('poster',font_scale=2)  
sns.lineplot(x=[1, 2, 3, 4], y=[3, 2, 5, 1], color="#b1283a")

-END-
节选自 原创Python可视化教程(基于py可视化利器seaborn): 530张图形+8000行代码+详细代码注释+后续免费更新+学习交流群 ,部分目录, 加入学习要趁早,随着加入学习的小伙伴越多,维护成本越来越大,月底将对价格适当调整, 优惠截止于7月31日24:00。

每类图表包含详细代码+详细代码注释,多达8000行代码,例如,

如何加入学习?

👇 ( 收费 、务必 备注:169 )

✅解锁获取 6大权限:
  • 代码(复制即可运行)
  • 在线教程文档(方便后续更新)
  • 依赖数据(免费下载)
  • 微信交流群
  • 后续更新
  • 交流群 定期包邮送最新统计、编程、AI类书籍