Seaborn 庫(kù)相較于 Matplotlib 使用更加簡(jiǎn)單方便,并且可以設(shè)置不同的 Seaborn 風(fēng)格。Seaborn 庫(kù)的主題風(fēng)格有如下 5 種:
- darkgrid
- whitegrid
- dark
- white
- ticks
再開(kāi)始介紹前,我們首先導(dǎo)入相關(guān)工具包,并執(zhí)行魔法指令:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
這里我們比之前多了一個(gè)工具包的導(dǎo)入:import seaborn as sns,就是我們今天介紹的主角 Seaborn 庫(kù)。
首先,使用 Matplotlib 繪制一張折線圖:
def my_plot():
x = np.linspace(-10, 10, 100)
for i in range(1, 7):
plt.plot(x, -x**2-5*i)
my_plot()
繪制結(jié)果:

下面,我們使用 sns.set() 將繪圖風(fēng)格設(shè)置為 Seaborn 庫(kù)默認(rèn)的主題風(fēng)格:
sns.set()
my_plot()
繪制結(jié)果:

可見(jiàn) Seaborn 庫(kù)默認(rèn)的主題風(fēng)格即 darkgrid 。
下面,我們來(lái)看 whitegrid 風(fēng)格的繪圖。首先構(gòu)造一組數(shù)據(jù):
>> data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
>> data
array([[ 0.50043126, 2.05154056, 2.07807178, 1.06626428, 2.23354891,
2.06661851],
[ 0.03881794, 0.2380959 , 1.80820601, 2.11175762, 2.07237335,
2.11019608],
[ 0.45544742, 0.75383046, 0.16691214, 2.35224002, 2.36564043,
3.99343506],
[-0.82310356, 0.7754227 , 1.56347575, 1.13595978, 2.27480695,
1.10286358],
...
[ 0.13538917, -0.41568549, -0.3778096 , 3.03486853, 1.96548553,
2.38730081],
[-0.95326404, 0.95174162, 1.80429181, 2.54299904, 1.04390341,
3.66710519],
[-2.48693243, 0.25720482, 1.49159918, 2.27662074, 1.78703827,
1.87306935]])
其中 data 為 20 * 6 的數(shù)組,將上述 6 列數(shù)據(jù)繪制為盒形圖:
sns.set_style("whitegrid")
sns.boxplot(data=data)
繪制結(jié)果:

當(dāng)然,也可以使用 dark 和 white 不使用網(wǎng)格:


ticks 會(huì)在坐標(biāo)軸上標(biāo)注出刻度:
sns.set_style("ticks")
sns.boxplot(data=data)

此外,sns.despine() 還可以將上方和右側(cè)的坐標(biāo)軸去掉:
sns.set_style("ticks")
sns.violinplot(data=data)
sns.despine()
這里,我們繪制的是和盒圖非常相似的小提琴圖:

還可以將左側(cè)的坐標(biāo)軸也指定為抹除:
sns.violinplot(data=data)
sns.despine(left=True)

最后,介紹一下 sns.axes_style("darkgrid") 返回的是一個(gè)上下文管理器,可以用在 with 語(yǔ)句中,這樣該坐標(biāo)系的風(fēng)格只影響 with 語(yǔ)句內(nèi)的繪圖。
plt.figure(figsize=(8, 10))
with sns.axes_style("darkgrid"):
plt.subplot(211)
sns.boxplot(data=data)
with sns.axes_style("whitegrid"):
plt.subplot(212)
sns.violinplot(data=data)
