【小睿的ML之路】Seaborn布局整体风格设置
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
这段代码:
-
np.arange(6)
创建一个数组,包含了 0 到 5 的六个递增数字,即[0, 1, 2, 3, 4, 5]
。 -
np.arange(6) / 2
对这个数组中的每个元素进行除以 2 的操作,得到的数组为[0.0, 0.5, 1.0, 1.5, 2.0, 2.5]
。 -
np.random.normal(size=(20, 6))
生成一个形状为 (20, 6) 的二维数组,其中的元素是从标准正态分布(均值为 0,标准差为 1)中随机抽样得到的。 -
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() # 去掉图形周围的轴线