Seaborn绘图模块,对Matplotlib进行封装,绘图效果更符合现代人的审美。
Seaborn属于Matplotlib的一个高级接口,使得作图更加容易。在多数情况下使用Seaborn能做出很具吸引力的图,而使用Matplotlib可以制作具有更多特色的图。应该把Seaborn视为Matplotlib的补充,而不是替代物。
1.使用Seaborn时,需要先导入:
import seaborn as sns
2.Seaborn通过set函数实现风格设置:设置绘图的背景色、风格、字型、字体等
seaborn.set(context='notebook', style='darkgrid', palette='deep',
font='sans-serif', font_scale=1, color_codes=True, rc=None)
(1)context='' 参数控制着默认的画幅大小,分别有 {paper, notebook, talk, poster} 四个值。其中,poster > talk > notebook > paper。
(2)style='' 参数控制默认样式,分别有 {darkgrid, whitegrid, dark, white, ticks}。
darkgrid:灰色网格
whitegrid:白色网格
dark:灰色背景
white:白色背景
ticks:十字叉
(3)palette='' 参数为预设的调色板。分别有 {deep, muted, bright, pastel, dark, colorblind} 等
(4)font='' 用于设置字体,
(5)font_scale= 设置字体大小,
(6)color_codes= 不使用调色板而采用先前的 'r' 等色彩缩写
seaborn的使用:
#导入需要的包
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#绘图
def sinplot(flip=2):
x=np.linspace(0,20,50)
for i in range(1,5):
plt.plot(x,np.cos(x+i*0.8)*(9-2*i)*flip)
sinplot()
设置style不同参数查看对应的样式:
sns.set(style="whitegrid")
sinplot()
sns.set(style="darkgrid")
sinplot()
sns.set(style="white")
sinplot()
sns.set(style="dark")
sinplot()
sns.set(style="ticks")
sinplot()
3.调用sns.set( )方法可以将样式转换为seaborn默认的绘图设置
sns.set()
sinplot()
4.Seaborn将matplotlib的参数划分为两个独立的组合。第一组是设置绘图的外观风格的,第二组主要将绘图的各种元素按比例缩放的,以至可以嵌入到不同的背景环境中。控制这些参数的接口主要有两对方法:
控制风格:axes_style(), set_style()
缩放绘图:plotting_context(), set_context()
每对方法中的第一个方法(axes_style(), plotting_context())会返回一组字典参数,第二个方法(set_style(), set_context())会设置matplotlib的默认参数
(1)利用set_style( )是用来设置主题的。
Seaborn有五个预设好的主题:darkgrid, whitegrid,dark,white,和 ticks,默认为darkgrid。
sns.set_style("darkgrid")
sinplot()
sns.set_style("whitegrid")
sinplot()
sns.set_style("dark")
sinplot()
sns.set_style("white")
sinplot()
sns.set_style("ticks")
sinplot()
(2)在seaborn中,可以利用despine()方法移除绘图中顶部和右侧的轴线。
sinplot()
sns.despine()
despine()方法中可以利用offset参数将轴线进行偏置,另外,当刻度没有完全覆盖整个坐标轴的的范围时,利用trim参数限制已有坐标轴的范围。
sinplot()
sns.despine(offset=20,trim=True)
#offset参数值越大,坐标轴偏离程度越大
sns.despine(offset=50,trim=True)#与offset=20对比
可以通过despine()控制哪个轴线将被移除
sinplot()
sns.despine(bottom=True)
#left(左边),right(右边),top(上边),bottom(下边)
sinplot()
sns.despine(left=True,bottom=True)
(3)也 可以利用with 语句使用axes_style()方法设置临时绘图参数
with sns.axes_style("darkgrid"):
plt.subplot(2,1,1)
sinplot()
plt.subplot(2,1,2)
sinplot(-1)
#sinplot(-1)与sinplot(),两者图形关于x轴对称
如果想定制化seaborn风格,可以将一字典参数传递给axes_style()和set_style()的参数rc(只能通过这个方法来覆盖风格定义中的部分参数)
sns.axes_style()
sns.set_style("darkgrid",{"axes.facecolor":"0.9"})
#"axes.facecolor"背景色透明度
sinplot()
(4)seaborn中通过set_context()设置缩放参数,预设的参数有paper, notebook, talk, poster。默认为notebook。
sns.set_context("paper")
sinplot()
sns.set_context("paper",font_scale=1.8,rc={"lines.linewidth":2})
#"lines.linewidth":线的粗细 font_scale=1.8:坐标轴字的大小
sinplot()
sns.set_context("notebook",font_scale=1.8,rc={"lines.linewidth":2})
sinplot()
sns.set_context("talk",font_scale=1.8,rc={"lines.linewidth":2})
sinplot()
sns.set_context("poster",font_scale=1.8,rc={"lines.linewidth":2})
sinplot()
5.直方图和密度曲线图:
Seaborn利用distplot( )和 kdeplot( )绘制直方图和密度曲线图,distplot( )为hist加强版,默认情况下绘制一个直方图,并嵌套一个对应的密度图。
使用:
import matplotlib as plt
df=pd.read_csv("iris.csv")
sns.set(color_codes=True)
sns.distplot(df["PetalWidth"])
使用distplot方法绘制的直方图与matplotlib类似。
在distplot的参数中,可以选择不绘制密度图。其中的rug参数绘制毛毯图,可以为每个观测值绘制小细线(边际毛毯),也可以单独用rugplot进行绘制
sns.distplot(df["PetalWidth"],bins=30,kde=False,rug=False)
#bins=20:表示柱状图中柱的宽窄
#rug=False:柱状图中没有下方的那个蓝色标记 rug=True:柱形下方有蓝色标记
#kde=True:显示密度曲线图
sns.distplot(df["PetalWidth"],bins=30,kde=False,rug=True)
sns.distplot(df["PetalWidth"],bins=30,kde=True,rug=True)
sns.distplot(df["PetalWidth"],bins=30,kde=True,rug=False)
如果设置hist为False,则可以直接绘制密度图而没有直方图。
sns.distplot(df["PetalWidth"],hist=False,rug=True)
#hist=True:则同时显示密度曲线和直方图
利用distplot函数可以同时绘制直方图、密度图和毛毯图,这些分布图都有对应的专门函数:kdeplot函数绘制密度图,rugplot用于绘制毛毯图
import matplotlib.pyplot as plt
df=pd.read_csv("iris.csv")
fig,axes=plt.subplots(1,2)
#kde密度曲线,rug边际毛毯
sns.distplot(df["PetalWidth"],ax=axes[0],kde=True,rug=True)
sns.kdeplot(df["PetalWidth"],ax=axes[1],shade=True)
plt.show()
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
sns.set(palette="muted",color_codes=True)
rs=np.random.RandomState(10)
d=rs.normal(size=100)
f,axes=plt.subplots(2, 2, figsize=(7, 7), sharex=True)
sns.distplot(d, kde=False, color="b", ax=axes[0,0])
sns.distplot(d, hist=False, rug=True, color="r", ax=axes[0,1])
sns.distplot(d, hist=False,color="g", kde_kws={"shade":True}, ax=axes[1,0])
sns.distplot(d, color="m", ax=axes[1,1])
plt.show()
6.散点图:
在Seaborn中,利用stripplot绘制各变量在每个类别的值。
使用:
sns.set(style='white',color_codes=True) #设置样式
sns.stripplot(x=df['Species'],y= df['PetalWidth'],data=df)
sns.despine() #去坐标轴
#x轴是各个种类,y轴显示不同种类的花瓣宽度
由于散点图中数据众多,很多点会被覆盖,这时可以加入抖动(jitter=True)。
sns.set(style='white',color_codes=True) #设置样式
sns.stripplot(x=df['Species'],y= df['PetalWidth'],data=df,jitter=True)
sns.despine()
如果需要看清每个数据点,可以使用swarmplot函数
sns.swarmplot(x=df["Species"],y=df["PetalWidth"],data=df)
sns.despine()
在matplotlib中,为了绘制两个变量的分布关系,常使用散点图的方法。
在Seaborn中,使用jointplot函数绘制一个多面板图,不仅可以显示两个变量的关系,还可以显示每个单变量的分布情况。
sns.jointplot(x="PetalLength",y="PetalWidth",data=df)
在jointplot函数中,改变kind参数为kde,但变量的分布就用密度图来代替,而散点图则会被等高线图代替
sns.jointplot(x="PetalLength",y="PetalWidth",data=df,kind="kde")
7.箱线图:
箱线图可以观察四分位数、中位数和极值。
Seaborn中利用boxplot( )绘制箱线图
df=pd.read_csv("iris.csv")#读数据
sns.boxplot(x=df["Species"],y=df["PetalWidth"])#绘图
plt.show()#显示图形
在seaborn中利用 pairplot()实现数据特征的两两对比。默认是所有特征,可以通过vars参数指定部分特征
seaborn.pairplot(data, hue=None, hue_order=None, palette=None,
vars=None, x_vars=None, y_vars=None, kind='scatter',
diag_kind='auto', markers=None, height=2.5, aspect=1,
dropna=True, plot_kws=None, diag_kws=None, grid_kws=None,
size=None)
pairplot主要展现的是变量两两之间的关系(线性或非线性,有无较为明显的相关关系)
df=pd.read_csv("iris.csv")
sns.set(style="ticks")
g=sns.pairplot(df,vars=["SepalWidth","PetalWidth"])
8.小提琴图:
小提琴图:是箱线图与核密度图的结合
箱线图展示了分位数的位置
小提琴图则展示了任意位置的密度
通过小提琴图可以知道哪些位置的密度较高。
在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计(在概率论中用来估计未知的密度函数)
sns.set_style("whitegrid")
df=pd.read_csv("iris.csv")#读数据
ax=sns.violinplot(x=df["PetalWidth"])
#表示花瓣宽度PetalWidth在不同宽度的数量(密度)
9.柱状图:
在Seaborn中使用barplot函数绘制柱状图,默认情况下,绘制的y轴是平均值
df=pd.read_csv("iris.csv")
sns.barplot(x=df["Species"],y=df["PetalWidth"],data=df)
在柱状图中,经常会绘制类别的计数柱状图,在matplotlib中需要对DataFrame进行计算,而在Seaborn中则使用countplot函数
sns.countplot(x="Species",data=df)
10.回归图:
绘制回归图可以揭示两个变量间的线性关系。
Seaborn中,使用regplot函数绘制回归图。
sns.regplot(x="PetalLength",y="PetalWidth",data=df)
11.可视化中的颜色:
颜色在可视化中非常重要,用来代表各种特征,并且提高整个图的观赏性。
在seaborn中颜色主要分为 连续渐变性 和 离散分类性。
先说说分类色板,主要用color_palette()函数。
.color_palette()能传入任何Matplotlib所支持的颜色 ·
.color_palette()不写参数则默认颜色
.set_palette()设置所有图的颜色6个默认的颜色循环主题:deep, muted, pastel, bright, dark, colorblind
import seaborn as sns
#默认的颜色循环主题,共10种
current_palette = sns.color_palette()
sns.palplot(current_palette)
使用hls色彩空间可以获得更多的颜色:
sns.palplot(sns.color_palette("hls", 10))
如:
使用默认的颜色主题:
data = np.random.normal(size=(20, 8)) + np.arange(8) 2
sns.boxplot(data=data)
使用hls色彩:
data = np.random.normal(size=(20, 8)) + np.arange(8) 2
sns.boxplot(data=data,palette=sns.color_palette("hls", 8))
还可以通过hls_palette()函数来改变颜色的亮度和饱和度:
· l-亮度 lightness
· s-饱和度 saturation
sns.palplot(sns.hls_palette(10, l=0.5, s=0.7))
# l=0.5:在(0,1)之间取值,数值越大,颜色越亮,数值越小,颜色越暗
#s=0.7饱和度,
连续渐变颜色:
色彩随数据变换,比如数据越来越重要则颜色越来越深。(只用在颜色加s即可,颜色的英文首字母大写)
sns.palplot(sns.color_palette("Greens"))
在表示颜色的面板名称后加_r:颜色翻转渐变:
面板名称有:
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, cividis, cividis_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, spring, spring_r, summer, summer_r, tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r,
terrain, terrain_r, twilight, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r, vlag, vlag_r, winter, winter_r
sns.palplot(sns.color_palette("winter_r"))