【小睿的ML之路】Seaborn布局整体风格设置

发布时间 2023-09-19 23:04:54作者: 郭小睿
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
def sinplot(flip=1): # 调用函数,flip参数可以控制曲线的翻转
    x = np.linspace(0,14,100) #在0-14上找到100个点
    for i in range(1,7):
        plt.plot(x, np.sin(x+i *.5) * (7-i) * flip) 
sinplot()

sns.set() # 设置Seaborn默认样式
sinplot()

# 五种主题风格
# darkgrid
# whitegrid
# dark
# white
# ticks
sns.set_style("whitegrid") # 设置Seaborn默认样式

# 生成随机数据
data = np.random.normal(size=(20,6)) + np.arange(6)/2
print(data)

# 绘制箱线图
sns.boxplot(data)
plt.show()
[[-0.95286633 -0.53127806  1.16563153  2.07840547  1.403997    2.64514238]
 [ 0.22548912  3.33856259  0.83023807  2.33868885  1.28700328  2.23249637]
 [ 0.36820429 -1.00469692  2.0607799   2.05905188  1.92557664  3.23316267]
 [ 0.59764997 -0.0835183   1.37232153  3.97776674  2.74125276  1.9658896 ]
 [-1.05343856  0.12481509  1.57895058  0.7918587   1.98452412  1.70428179]
 [-1.18359227  0.74292816  0.53145256  1.53790487  1.6155882   3.17311247]
 [-0.44653529  0.92833107  0.22491917  0.13105792  2.50711806  2.6338002 ]
 [ 1.51402272  1.10970415  1.8731155   1.07113087  2.98396479  2.88682767]
 [ 1.14804962  0.30210685  1.74977016  1.95062381  2.74457532  2.83961766]
 [-0.3297629  -0.36823257  0.21408028  2.08706658  0.28315676  2.76522345]
 [ 0.07051768  0.65409343  2.07418633  3.18205561 -1.13123157  2.18715361]
 [-0.9172494   0.0905201   1.33378319  1.50174586  2.50583286  2.17201078]
 [-1.87811773  0.32885309  1.33748434  1.80585358  1.68397368  2.01650815]
 [-1.44442414  1.35680545  2.12985272  1.65194755  1.7312331   2.76488095]
 [-1.96786487  1.27373606  1.60450738  0.7314849   2.02646092  2.04497131]
 [-0.72785646 -0.75778133  0.89552914  3.66659349  1.88354474  3.07368725]
 [ 0.67563405 -0.64935735  0.66651626  2.61570803  2.37484281  2.09728843]
 [ 0.55318721  1.7411158   0.1267111   1.91074851  0.20215198  1.74872934]
 [-0.7550965   0.41405094  0.52001111  2.12385858  1.19170381  1.94470644]
 [ 1.58337021  0.28614905  0.21952742  2.28593126  0.30316578  2.25229553]]

让我们来解释 np.random.normal(size=(20, 6)) + np.arange(6) / 2 这段代码:

  1. np.arange(6) 创建一个数组,包含了 0 到 5 的六个递增数字,即 [0, 1, 2, 3, 4, 5]

  2. np.arange(6) / 2 对这个数组中的每个元素进行除以 2 的操作,得到的数组为 [0.0, 0.5, 1.0, 1.5, 2.0, 2.5]

  3. np.random.normal(size=(20, 6)) 生成一个形状为 (20, 6) 的二维数组,其中的元素是从标准正态分布(均值为 0,标准差为 1)中随机抽样得到的。

  4. np.random.normal(size=(20, 6)) + np.arange(6) / 2 将第二步和第三步得到的数组相加,这里利用了广播机制,将 (20, 6) 的数组与 (6,) 的数组相加,即将第二步中得到的数组的每一行加上第三步中的数组。

    例如,对于第一行来说,就是将 np.random.normal() 生成的第一行数据与 [0.0, 0.5, 1.0, 1.5, 2.0, 2.5] 分别相加,得到第一行的随机数据加上 [0.0, 0.5, 1.0, 1.5, 2.0, 2.5] 的结果。

这样就得到了一个形状为 (20, 6) 的数组,其中的每一行是从标准正态分布中随机抽样得到的数据,加上了 [0.0, 0.5, 1.0, 1.5, 2.0, 2.5] 这个递增数组。

这个数据会被用来生成箱线图,展示数据的分布情况。

sns.set_style("dark") 
sinplot()

sns.set_style("white") 
sinplot()
sns.despine() # 去掉图形周围的轴线