本文分享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")