好久以前对seaborn有过一些涉及可是没有深刻探究,此次有趁着有数据可视化的需求,就好好学一学html
Seaborn实际上是在matplotlib的基础上进行了更高级的API封装,从而使得做图更加容易,在大多数状况下使用seaborn就能作出很具备吸引力的图,为数据分析提供了很大的便利性。可是应该把Seaborn视为matplotlib的补充,而不是替代物。python
此次就从最基本的图标风格和调色板开始,学习seaborn。web
# 利用 matplotlib建立一个正弦函数及图表 def sinplot(flip=1): x = np.linspace(0, 14, 100) # fig = plt.figure(figsize=(10,6)) for i in range(1,7): plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip) sinplot()
seaborn.set(context =‘notebook’,style =‘darkgrid’,palette =‘deep’,font =‘sans-serif’,font_scale = 1,color_codes = True,rc = None)spring
sns.set(style='darkgrid',font_scale=1.5) # 利用此方法能够快速设置seaborn的默认风格,固然也能够添加参数设置其余风格 # font_scale:float,单独的缩放因子能够独立缩放字体元素的大小。 sinplot()
seaborn.set_style(style = None,rc = None )安全
# 切换seaborn图表风格 # 风格选择包括:"white", "dark", "whitegrid", "darkgrid", "ticks" # rc:dict,可选,参数映射以覆盖预设的seaborn样式字典中的值 fig = plt.figure(figsize=(10, 8)) ax1 = fig.add_subplot(2, 1, 1) sns.set_style('whitegrid',{"xtick.major.size": 10, "ytick.major.size": 10}) data = np.random.normal(size=(20,6)) + np.arange(6) / 2 sns.boxplot(data=data) ax2 = fig.add_subplot(2, 1, 2) sinplot()
seaborn.despine(fig=None, ax=None, top=True, right=True, left=False, bottom=False, offset=None, trim=False)dom
# 设置图表坐标轴 sns.set(style='ticks',font_scale=1) # 设置风格 fig = plt.figure(figsize=(10,12)) plt.subplots_adjust(hspace=0.3) # 调整子图间距 # 图表基本设置 ax1 = fig.add_subplot(3, 1, 1) sinplot() sns.despine(ax=ax1) # 默认隐藏右边和上边的坐标轴 ax2 = fig.add_subplot(3, 1, 2) sns.violinplot(data=data) sns.despine(ax=ax2,offset={'bottom':5,'left':10}) # offset :坐标轴是否分开偏移,正值向外侧移动,负值向内侧移动.可用字典单独对每一个轴设置 # trim: 当为True时,坐标轴两端限制在数据的最大最小值处 ax3 = fig.add_subplot(3, 1, 3) sns.boxplot(data=data, palette='deep') sns.despine(ax=ax3,left=True, right= False, trim=True, offset={'bottom':10,'right':10}) # top, right, left, bottom:布尔型,为True时不显示
# 四、axes_style() # 设置局部图表风格,可学习和with配合的用法 fig = plt.figure(figsize=(10,8)) with sns.axes_style("darkgrid"): plt.subplot(211) sinplot() # 设置局部图表风格,用with作代码块区分 sns.set_style("whitegrid") plt.subplot(212) sinplot() # 外部表格风格
seaborn.set_context(context = None,font_scale = 1,rc = None )svg
# 设置显示比例尺度 # 选择包括:'paper', 'notebook', 'talk', 'poster'.这四个是预设的。不会影响总体样式。 # 默认为notebook sns.set_context("notebook") sinplot() plt.grid(linestyle='--')
sns.color_palette(palette=None, n_colors=None, desat=None)函数
咱们选择颜色经常依据数据特征来选择,因此下面就从post
分类
:彼此间差别较大连续
:颜色按照顺序渐变发散
:中间颜色浅,两端颜色深三个调色板来说解color_palette()
函数学习
当你不用区分离散数据的顺序时,建议使用分类调色板
# 默认6种颜色:deep, muted, pastel, bright, dark, colorblind # n_colors:int,调色板中的颜色数量 # dasat:float,去饱和度0-1之间 current_palette = sns.color_palette() sns.palplot(current_palette) # 当不带参数的调用将返回当前默认颜色循环中的全部颜色 # 能够传入任何matplotlib支持的颜色
当须要6中以上的颜色时,能够在圆形颜色空间中按均匀间隔画出颜色。
最多见的是使用hls
颜色空间。
sns.palplot(sns.color_palette('hls',8)) # 颜色色块个数为8个
data = np.random.normal(size=(10, 8)) + np.arange(8) / 2 sns.boxplot(data=data,palette=sns.color_palette("hls", 8)) plt.show()
# 设置亮度,饱和度 # h - 第一个色调 # l - 亮度 # s - 饱和度 sns.palplot(sns.husl_palette(8, l=.6, s=.7)) # 这个看上去更舒服,更易区分
另外一个分类色板来源于Color Brewer(一样也具备连续色板和发散色板
),它也一样存在于matplotlib colormaps中,可是并无获得很好的处理。在Seaborn中,当你调用Color Brewer分类色板时,你总能获得离散的颜色,可是这意味着它们在某一点开始了循环。
Color Brewer网站的一个很好的功能是它提供了一些关于哪些调色板是色盲安全的指导
# Color Brewer颜色设置 sns.palplot(sns.color_palette("Paired",8)) sns.palplot(sns.color_palette("Set1",10))
xkcd包含了一系列命名RGB颜色。共954种颜色,您如今可使用xkcd_rgb字典在seaborn中引用它们:
plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=3) plt.plot([0, 1], [0, 2], sns.xkcd_rgb["medium green"], lw=3) plt.plot([0, 1], [0, 3], sns.xkcd_rgb["denim blue"], lw=3)
当数据范围从相对较低或不感兴趣的值到相对较高或有趣的值时,可使用连续(顺序)调色板,在kdeplot()和heatmap()函数中经常会用到。
具备大色调偏移的色彩图每每会引入数据中不存在的不连续性,而且咱们的视觉系统没法天然地将彩虹映射到诸如“高”或“低”的定量区别。结果是这些可视化最终更像是一个谜题,它们模糊了数据中的模式而不是揭示它们
因此对于顺序数据,最好使用色调最多相对微妙偏移的调色板,伴随着亮度和饱和度的大幅度变化。这种方法天然会吸引人们关注数据的相对重要部分
sns.palplot(sns.color_palette("Blues")) sns.palplot(sns.color_palette("Blues_r")) # 与matplotlib中同样,若是您但愿反转亮度渐变,则能够为_r调色板名称添加后缀 # 不是全部颜色均可以反转!!!
cubehelix调色板系统既能亮度线性变化同时也能色调变化的线性色板。这意味着当转换为黑白(用于打印)或由色盲我的查看时,色彩映射中的信息将被保留。
seaborn.cubehelix_palette(n_colors = 6,start = 0,rot = 0.4,gamma = 1.0,hue = 0.8,light = 0.85,dark = 0.15,reverse = False,as_cmap = False )
# 按照线性增加计算,设置颜色 sns.palplot(sns.color_palette("cubehelix", 8)) sns.palplot(sns.cubehelix_palette(8, gamma=2)) sns.palplot(sns.cubehelix_palette(8, start=.5, rot=-.75)) sns.palplot(sns.cubehelix_palette(8, start=2, rot=0, dark=0, light=.95, reverse=True)) # n_colors → 颜色个数 # start → 值区间在[0,3],开始颜色 # rot → float,颜色旋转角度,多是(-1,1)之间 # gamma → 颜色伽马值,>1 较亮,<1 较暗 # dark,light → 值区间0-1,颜色深浅 # reverse → 布尔值,默认为False,由浅到深
对于自定义顺序调色板的简单界面,您可使用light_palette()
或使用dark_palette()
,都是由单一的颜色并生成从浅色或深色去饱和值到该颜色的渐变调色板。这些函数还伴随着启动交互式小部件以建立这些调色板的功能
seaborn.light_palette(color,n_colors = 6,reverse = False,as_cmap = False,input =‘rgb’ )
seaborn.dark_palette(color,n_colors = 6,reverse = False,as_cmap = False,input =‘rgb’ )
# color: 十六进制代码,html颜色名称或input空间中的元组 # input: {'rgb','hls','husl',xkcd'} # 用于解释输入颜色的颜色空间。前三个选项适用于元组输入,后者适用于字符串输入 sns.palplot(sns.light_palette("green"))# 按照green作浅色调色盘 sns.palplot(sns.dark_palette('green', reverse=True))# 按照green作深色调色盘 sns.palplot(sns.light_palette((260, 75, 60), input="husl")) sns.palplot(sns.dark_palette("muted purple", input="xkcd"))
第三类调色板称为“发散”。这些用于大低值和高值都颇有趣的数据。数据中一般还有明肯定义的中点。例如,若是要绘制某个基线时间点的温度变化,最好使用误差色图来显示相对减小的区域和相对增长的区域。
一样重要的是要强调使用红色和绿色应该避免,由于大量潜在的观众将没法区分它们
seaborn.diverging_palette(h_neg, h_pos, s=75, l=50, sep=10, n=6,
center=‘light’, as_cmap=False)
# 建立分散颜色 # h_neg, h_pos → 起始/终止颜色值 # s → 值区间0-100,饱和度 # l → 值区间0-100,亮度 # n → 颜色个数 # center → 中心颜色为浅色仍是深色“light”,“dark”,默认为light # Color Brewer库带有一组精心挑选的发散色图 sns.palplot(sns.color_palette("BrBG", 7)) # 固然能够本身定制 sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=7))
plt.figure(figsize = (8,6)) x = np.arange(16).reshape(4, 4) cmap = sns.diverging_palette(200, 20, sep=16, as_cmap=True) sns.heatmap(x, cmap=cmap)
您可使用该choose_colorbrewer_palette()
函数来播放各类颜色选项,若是但愿返回值是能够传递给seaborn或matplotlib函数的colormap对象,则能够将as_cmap参数设置为True
seaborn.choose_colorbrewer_palette(data_type, as_cmap=False)
sns.choose_colorbrewer_palette('q') # sequential:顺序,能够用 s 来代替 # diverging:发散, 能够用 d 来代替 # qualitative:分类, 能够用 q 来代替
# Color Brewer的颜色图: # Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, # BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, #Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, # Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, #PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, # Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, # Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, # Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, # YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, # autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cool, cool_r, # coolwarm, coolwarm_r, copper, copper_r, cubehelix, # cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, # gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, # gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, # gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, # hsv_r, icefire, icefire_r, inferno, inferno_r, jet, jet_r, magma, magma_r, mako, # mako_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, # pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, rocket, rocket_r, # seismic, seismic_r, spectral, spectral_r, spring, # spring_r, summer, summer_r, terrain, terrain_r, viridis, viridis_r, vlag, vlag_r, winter, winter_r
相似于color_palette()。set_palette()
接受相同的参数,但它会更改默认的matplotlib参数,以便将调色板应用于全部绘图。
# 设置调色板后,绘图建立图表 sns.set_style("whitegrid") fig = plt.figure(figsize=(8,6)) # 设置风格 with sns.color_palette("PuBuGn_d"): plt.subplot(211) sinplot() sns.set_palette("husl") plt.subplot(212) sinplot() # 绘制系列颜色