seaborn库
文章目录
0.设置seaborn风格
sns.set(style="darkgrid")
- 5种风格:
darkgrid
(默认),whitegrid
,dark
,white
,ticks
- 5种风格:
sns.set_context(context=None, font_scale=1)
:设置绘图背景参数,涉及标签、线条和其他元素大小,但与整体风格无关context
参数包括:paper,talk,poster or a dict or Nonefont_scale
参数用于放缩字体大小
.set_axis_labels(xlabel,ylabel)
:设置轴标签
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
sns.set_context("talk")
sns.set(style="ticks")
df = sns.load_dataset('anscombe')
一、Relational plots 关系类图表
1.relplot() 关系类图,散点图和线图的集合
seaborn.relplot(x=None, y=None, hue=None, size=None, style=None, data=None, row=None, col=None, col_wrap=None, row_order=None, col_order=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=None, dashes=None, style_order=None, legend='brief', kind='scatter', height=5, aspect=1, facet_kws=None, **kwargs)
:线图或散点图- data:数据,必须是DataFrame类型
- x/y:变量名或向量
- hue/size/style:用不同颜色/大小/样式对元素进行分组
- row,col:形成多个图(按行/列出现图),为数据的变量名
- col_wrap:可以将多列以多行的形式展现
- kind:散点图或线图{‘scatter’,‘line’}
- height:每个图的高度
- aspect:每个图的长宽比
- legend:指定图例的形式。{‘brief’,‘full’,or False}
fmri = sns.load_dataset("fmri")
sns.relplot(x="timepoint", y="signal",hue="event", style="event", col="region",
kind="line", data=fmri)
plt.show()
如图,
2.scatterplot() 散点图
seaborn.scatterplot(x=None, y=None, hue=None, style=None, size=None, data=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=True, style_order=None, x_bins=None, y_bins=None, units=None, estimator=None, ci=95, n_boot=1000, alpha='auto', x_jitter=None, y_jitter=None, legend='brief', ax=None, **kwargs)
:散点图- x,y,hue:输入数据或变量名
- data:DataFrame类型
- hue/size/style:变量名或向量。根据变量或向量对不同类别的数值用不同颜色/大小的点/标记物显示
- palette:调色板
- hue_order/size_order/style_order:当hue/size/style是分类变量时指定分类变量的顺序排列,用一个列表指定(当hue/size/style是输入向量时,此项不起作用)
- hue_norm/size_norm:当hue是输入向量时,对hue/size中涉及的数据单元进行标准化。tuple或Normalize object
- sizes:当size使用时,用于指定不同类别的点的大小。可以是list(里面是size值)或dict(每个等级对应的size)。当size是向量时,可以是一个tuple,规定最大最小的size,使其他值限定在这个范围内
- markers:当使用style变量来使不同类别用不同标志物显示时,markers用于指定哪些类别用哪些标记。若为True,默认的标记;False则用实线、无标记来显示;可以输入list或dict指定不同等级不同标记
- estimator,ci,n_boot,alpha,legend:同上下文
sns.set(style="dark")
tips = sns.load_dataset("tips")
cmap = sns.cubehelix_palette(dark=.3, light=.8, as_cmap=True)
ax = sns.scatterplot(x="total_bill", y="tip",hue="size", size="size",
sizes=(20, 200), hue_norm=(0, 7), legend="full", data=tips)
plt.show()
如图,
3.lineplot() 折线图(时间序列图)
seaborn.lineplot(x=None, y=None, hue=None, size=None, style=None, data=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, dashes=True, markers=None, style_order=None, units=None, estimator='mean', ci=95, n_boot=1000, sort=True, err_style='band', err_kws=None, legend='brief', ax=None, **kwargs)
:绘制线段,所传数据必须为一个pandas数组- data:pandas中的DataFrame类型的
- x,y:输入数据或变量名(hue:在同一张图上分类)
- hue:对生成的不同颜色的线段进行分组,data中的变量名或向量
- size:对生成的不同宽度的线段进行分组,data中的变量名或向量
- style:对生成的不同线段、标记等的变量进行分组,data中的变量名或向量
- palette:设置hue指定变量不同级别的颜色,一般是seaborn内置调色板名称或列表字典
- hue_order/size_order:指定hue/size变量出现的顺序
- hue_norm/size_norm:hue/size变量为数值型时,对应用了不同颜色级别/不同大小的数据进行标准化处理;当hue变量是类别时,则不处理。tuple或Normalize对象
- sizes:当size使用时,确定size对象,可以是size值的列表或size到sizes映射级别的字典。当size是数值型时,可以是一个元组,指定最大最小值,对范围外的其他值进行标准化。
- dasher/markers:指定使用不同风格时线段/标记的样式,True默认风格或可以用list/dict指定,False则使用实线段/无标记的线段
- units:用于不需要精确标识的情况下显示实验重复的分布。根据抽样单元对变量进行分组,为每个单元绘制一个单独的行
- ci:指定置信区间
sns.set(style="darkgrid")
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint", y="signal",
hue="region", style="event",
data=fmri)
plt.show()
如图,
二、Categorical plots 分类图表
1.catplot() 分类图表:分类散点图、分布密度散点图、箱图、小提琴图、增强箱图、点图、条形图、计数图
seaborn.catplot(x=None, y=None, hue=None, data=None, row=None, col=None, col_wrap=None, estimator=<function mean>, ci=95, n_boot=1000, units=None, order=None, hue_order=None, row_order=None, col_order=None, kind='strip', height=5, aspect=1, orient=None, color=None, palette=None, legend=True, legend_out=True, sharex=True, sharey=True, margin_titles=False, facet_kws=None, **kwargs)
:指定kind参数可以画出分类散点图、分布密度散点图、箱图、小提琴图、增强箱图、点图、条形图、计数图。- x,y,hue:输入数据或变量名(hue:在同一张图上分类)
- data:DataFrame
- row,col:data中的变量名。用于确定分类变量(根据变量名分为不同图,row按行显示,col按列显示)
- col_wrap:指定图每行的张数,该参数最大只能等于col参数对应的不同类别的数量
- estimator:指定每个分类bin中估计的统计函数。
- ci:{float,‘sd’,None}。在估计值附近绘制置信区间大小。若为float,进行bootstrapping并指定置信水平;若为’sd’,不进行bootstrapping且绘制观测值的标准差;若为None,不绘制error bar且不进行bootstraping
- n_boot:计算置信区间时bootstrapping的迭代次数
- units:data中的变量名或数据的向量。当需要多层bootstrap抽样时指定用于抽样的单元
- order,hue_order:指定分类变量绘制顺序
- row_order,col_order:指定行/列变量的绘制顺序
- kind:指定绘图了类型,{‘count’:计数图,‘point’:点图,‘bar’:条形图,‘strip’:分类散点图,‘swarm’:分布密度散点图,‘box’:箱线图,‘violin’:小提琴图,‘boxen’:增强箱线图}
- height,aspect(纵横比),orient(图的方向v|h),color,palette,legend(图例)
- legend_out:若为True,则扩展图形尺寸,图例将绘制在中间右侧的图形之外
- share{x,y}:是否共享x/y轴。{True,False,‘col’,‘row’}。若为True,则共享x轴,y轴
- margin_titles:若为True,则行变量标题将绘制在最后一列的右侧
# 第一张图:条形图
sns.set(style="whitegrid")
titanic = sns.load_dataset("titanic")
# a nested barplot
ax=sns.catplot(x="class", y="survived", hue="sex", data=titanic,
height=6, kind="bar", palette="muted")
ax.despine(left=True)
ax.set_ylabels("survival probability")
plt.show()
# 第二张图
sns.set(style="whitegrid")
df = sns.load_dataset("exercise")
# 点图
ax = sns.catplot(x="time", y="pulse", hue="kind", col="diet",
capsize=.2, palette="YlGnBu_d", height=6, aspect=.75,
kind="point", data=df)
ax.despine(left=True)
plt.show()
图:
2.stripplot() 分类散点图
seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=True, dodge=False, orient=None, color=None, palette=None, size=5, edgecolor='gray', linewidth=0, ax=None, **kwargs)
:分类散点图。- x,y,hue,data,order,hue_order:同上
- jitter:True则有一个默认值。float指定数量。当散点太多且重叠时,这个参数就很有用,更容易看清楚分布。
- dodge:当使用hue时,若为True,则在分类的轴上根据不同分类等级将点分离。否则,每一等级的点将绘制在其他等级的上面
- orient,color,palette:同上
- size:点的标记的大小(直径)
- edgecolor:点周围线条的颜色
- linewidth:构图元素灰线的宽度
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
tips = sns.load_dataset("tips")
ax = sns.stripplot("day", "total_bill", "smoker", data=tips, palette="Set2",
size=20, marker="D", edgecolor="gray", alpha=.25)
plt.show()
图,
3.swarmplot() 能够显示分布密度的分类散点图
seaborn.swarmplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, dodge=False, orient=None, color=None, palette=None, size=5, edgecolor='gray', linewidth=0, ax=None, **kwargs)
:能够显示分布密度的分类散点图,像蜂巢一样。类似于stripplot的图,不同在于这些点被调整过不会重叠。可以更好表现数据的分布。但是不能很好地适用于大数据集。- x,y,hue,data,order,hue_order,dodge,orient,color,palette,linewidth:同上
- size:标记点的直径大小
- edgecolor:每个点旁边的线的颜色
sns.set(style="whitegrid", palette="muted")
iris = sns.load_dataset("iris")
iris = pd.melt(iris, "species", var_name="measurement")
sns.swarmplot(x="measurement", y="value", hue="species",palette=["g", "c", "y"], data=iris)
plt.show()
如图,
4.boxplot() 箱图
seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)
:箱线图- x,y,hue:指定变量名进行分组
- data:DataFrame类型,数组等
- order,hue_orde:指定分类变量绘制顺序
- orient:绘图方向,{‘v’,‘h’}垂直或水平
- saturation:控制颜色的原始饱和度
- width:元素宽度或主要分组变量一个级别所有元素的宽度
- fliersize:指定对异常值的标记的大小
- linewidth:指定元素的灰线宽度
- whis:指定超过两个四分位数时IQR的比例,超过此范围的点被识别为异常值
- notch:是否使矩形框凹陷来显示中位数
sns.set(style="ticks", palette="pastel")
tips = sns.load_dataset("tips")
sns.boxplot(x="day", y="total_bill",
hue="smoker", palette=["m", "g"],
data=tips)
sns.despine(offset=10, trim=True)
plt.show()
如图,
5.violinplot() 小提琴图
seaborn.violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100, width=0.8, inner='box', split=False, dodge=True, orient=None, linewidth=None, color=None, palette=None, saturation=0.75, ax=None, **kwargs)
:小提琴图和箱线图都是显示数据在多个层次上的分布,小提琴图以基础分布的核密度为特征。可以单次显示多个数据分布- x,y,hue:变量名
- data:DataFrame类型,数组等
- order,hue_order:同上
- bw:核密度的带宽,{‘scott’,‘silverman’,float}
- cut:以带宽大小为单位的距离,来控制小提琴图外壳延伸超过内部极端数据点的密度
- scale:缩放图的宽度,{‘area’,‘count’, ‘width’}。area是每张图相同面积;count:宽度根据观察点的数量进行缩放;width:相同宽度
- scale_hue:缩放比例是在分组变量上还是所有小提琴图上
- width:设置宽度
- inner:{“box”, “quartile”, “point”, “stick”, None}。box:微型箱线图;quartils:显示四分卫数线;point/stick:显示具体数据点;None,没有修饰
- split:当有两种颜色的变量时,若为True则半边小提琴图对应一种颜色
- orient:{‘v’,‘h’},垂直或水平绘图
- linewidth,saturation同上
sns.set(style="whitegrid", palette="pastel", color_codes=True)
tips = sns.load_dataset("tips")
sns.violinplot(x="day", y="total_bill", hue="smoker",split=True, inner="quart",
palette={"Yes": "y", "No": "b"},data=tips)
sns.despine(left=True)
plt.show()
如图,
6.boxenplot() 增强箱图
seaborn.boxenplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, k_depth='proportion', linewidth=None, scale='exponential', outlier_prop=None, ax=None, **kwargs)
:它类似于箱形图,在箱形图中绘制一个分布的非参数表示,其中所有特征都对应于实际观测值。通过绘制更多的分位数,它提供了关于分布形状的更多信息,特别是在尾部。- x,y,hue,data,order,hue_order,orient,color,palette,saturation(颜色饱和度):同上
- width:不分类时,指定所有元素的宽度;分类时,是主要分类变量的一个级别中所有元素的宽度
- dodge:当使用hue时,元素是否与分类的轴一起移动
- k_depth:通过分位数的数量来确定箱子数{‘proportion’,‘tukey’,‘trustworthy’}。
- linewidth:线宽
- scale:{‘linear’,‘exponential’,‘area’}。确定箱子宽度的方法,视觉上结果相似。'linear’通过一个线性常数因子减少宽度;'exponential‘用未被涉及的数据的比例;'area’与涉及的数据比例成正比
- outlier_prop:指定被认为是离群值的比例。与k_depth一起使用来确定分位数的数量。范围应当在[0,1]之间。
sns.set(style="whitegrid")
tips = sns.load_dataset("tips")
sns.boxenplot(x="day", y="total_bill", hue="smoker",data=tips, palette="Set3")
plt.show()
图,
7.pointplot() 点图
seaborn.pointplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, estimator=<function mean>, ci=95, n_boot=1000, units=None, markers='o', linestyles='-', dodge=False, join=True, scale=1, orient=None, color=None, palette=None, errwidth=None, capsize=None, ax=None, **kwargs)
:点图代表散点图位置的数值变量的中心趋势的估计,并使用误差线给出该估计的不确定性的衡量。比条形图更能比较一个或多个分类变量的不同级别。- x,y,hue:同上
- data:同上
- order,hue_order:同上
- estimator,ci,n_boot,units:同上
- marker:用于标记分类变量不同等级
- linestyles:线的样式,可以给不同等级的分类变量用不同线的样式
- dodge:当hue参数使用时,元素是否和分类轴一同移动。
- join:若为True,同一等级的分类变量值将连线
- scale:大小,float
- orient,color,palette:同上
- errwidth:error bar的宽度
- capsize:error bar上caps的宽度
sns.set(style="darkgrid")
tips = sns.load_dataset("tips")
ax = sns.pointplot(x="time", y="total_bill", hue="smoker",data=tips,
markers=["o", "x"],linestyles=["-", "--"])
plt.show()
如图,
8.barplot() 条形图
seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, estimator=<function mean>, ci=95, n_boot=1000, units=None, orient=None, color=None, palette=None, saturation=0.75, errcolor='.26', errwidth=None, capsize=None, dodge=True, ax=None, **kwargs)
:条形图显示数值变量与每个矩形高度的中心趋势的估计值,并使用误差线提供关于不确定性的衡量。- x,y,hue:data的变量名(或者x,y是输入的数据),hue用于分组
- data:DataFrame,array,list of arrays
- order,hue_order:指定分类的顺序,列表的形式
- estimator:用来估计的统计函数,标量的形式
- ci:置信区间大小,{float,‘sd’,or None }.若是浮点值,则是置信水平值;若为’sd’,不进行bootstraping抽样,而绘制出标准差
- n_boot:整数。需要计算置信区间时的bootstrap抽样的迭代次数
- units:data中的变量名或数据的向量。当需要多层bootstrap抽样时指定用于抽样的单元
- orient:{’v‘,’h‘},纵向或横向显示图
- color,palette,saturation(颜色的原始饱和度)
- errcolor,errwidth:代表置信区间的线的颜色/宽度
- capsize:浮点数,在误差条上的’cap’的宽度
- dodge:当hue参数使用时,元素是否和分类轴一同移动。
sns.set(style="whitegrid")
crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False)
f, ax = plt.subplots(figsize=(6, 15))
sns.set_color_codes("pastel")
# 条形图
sns.barplot(x="total", y="abbrev", data=crashes,
label="Total", color="b")
sns.set_color_codes("muted")
sns.barplot(x="alcohol", y="abbrev", data=crashes,
label="Alcohol-involved", color="b")
# 图例和轴的一些设置
ax.legend(ncol=2, loc="lower right", frameon=True)
ax.set(xlim=(0, 24), ylabel="",
xlabel="Automobile collisions per billion miles")
sns.despine(left=True, bottom=True)
plt.show()
图,
9.countplot() 计数图
seaborn.countplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, dodge=True, ax=None, **kwargs)
:用bars显示每个类别观测值的数量。计数图可以被认为是分类的直方图。- 参数意义同上
sns.set()
titanic = sns.load_dataset("titanic")
ax = sns.countplot(x="class", hue="who", data=titanic, palette="Set3")
plt.show()
如图,
三、Distribution plot 分布图
1.jointplot() 双变量关系图
seaborn.jointplot(x, y, data=None, kind='scatter', stat_func=None, color=None, height=6, ratio=5, space=0.2, dropna=True, xlim=None, ylim=None, joint_kws=None, marginal_kws=None, annot_kws=None, **kwargs)
:双变量图,提供了几个类型的图- x,y:输入数据或变量名
- data:当x,y指定的是变量名时,输入类型为DataFrame
- kind:指定图的类型,{‘scatter’,‘reg’,‘resid’,‘kde’,‘hex’},hex是hexbin图的缩写,显示落在六边形仓内的观测数
- color,height,ratio(轴高与边缘轴高之比),space(两轴之间空间,默认0.2)
- dropna:若为True,剔除x,y上的缺失值
- {x,y}lim:限制轴的值,两元素的元组
- {joint,marginal,annot}_kws:其他参数的设置
# first,核函数图
sns.set(style="white")
rs = np.random.RandomState(5)
mean = [0, 0]
cov = [(1, .5), (.5, 1)]
x1, x2 = rs.multivariate_normal(mean, cov, 500).T
x1 = pd.Series(x1, name="$X_1$")
x2 = pd.Series(x2, name="$X_2$")
sns.jointplot(x1, x2, kind="kde", height=7, space=0)
# second,hexbin图
sns.set(style="ticks")
rs = np.random.RandomState(11)
x = rs.gamma(2, size=1000)
y = -.5 * x + rs.normal(size=1000)
sns.jointplot(x, y, kind="hex", color="#4CB391")
# third,回归图
sns.set(style="darkgrid")
tips = sns.load_dataset("tips")
sns.jointplot("total_bill", "tip", data=tips, kind="reg",
xlim=(0, 60), ylim=(0, 12), color="m", height=7)
plt.show()
图:
2.pairplot() 变量关系组图
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)
:显示变量关系的一组图- data:DataFrame类型
- hue:变量名。用不同颜色显示不同类别
- hue_order:确定变量等级的顺序。list of strings
- palette:颜色板
- vars:指定要使用的data中的变量
- {x,y}_vars:图中行和列分别使用的变量
- kind:绘制不同关系的图的类型。{‘scatter’,‘reg’}
- diag_kind:绘制对角线上子图的类型。{’auto’,‘hist’,‘kde’}
- markers:所有点的标记(string)或指定分类的每个等级不同标记(list)
- height,aspect(宽:高),dropna(绘制前去除缺失值)
sns.set(style="ticks")
df = sns.load_dataset("iris")
sns.pairplot(df, hue="species")
plt.show()
3.distplot() 直方图,质量估计图
seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)
:绘制单变量分布图- a:数据,series、一维数组或列表
- bins:直方图柱的数目,默认为None(系统指定数量)
- hist/kde:是否绘制直方图/高斯核密度图
- rug:是否在横轴上绘制rugplot图
- {hist, kde, rug, fit}_kws:一些关键词参数
- color:指定除曲线外的颜色
- vertical:若为True,则x-y轴互换/显示在y轴
- norm_hist:若为True,则直方图的高度显示密度而不是频数;核函数图默认为True
- axlabel:横轴标签
- ax:在参数设定的轴上绘图
sns.set(style="white", palette="muted", color_codes=True)
rs = np.random.RandomState(10)
# 设置一个2×2的画布
f, axes = plt.subplots(2, 2, figsize=(7, 7), sharex=True)
sns.despine(left=True)
# 生成数据
d = rs.normal(size=100)
# 第一张图:简单的直方图,蓝色(ax指定哪张图)
sns.distplot(d, kde=False, color="b", ax=axes[0, 0])
# 第二张图:核密度图,显示rug,红色
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.setp(axes, yticks=[])
plt.show()
如图,
4.kdeplot() 核函数密度估计图
seaborn.kdeplot(data, data2=None, shade=False, vertical=False, kernel='gau', bw='scott', gridsize=100, cut=3, clip=None, legend=True, cumulative=False, shade_lowest=True, cbar=False, cbar_ax=None, cbar_kws=None, ax=None, **kwargs)
- data:一维数组,单变量时作为唯一变量;data2:一维数组,在单变量时不输入,双变量作为第二个变量输入
- shade:在曲线下方增加阴影(true/false)
- shade_lowest:若为True,为核密度最低的范围着色,可以比较不同分布总体
- kernel:核函数{‘gau’ | ‘cos’ | ‘biw’ | ‘epa’ | ‘tri’ | ‘triw’ },默认’gau’高斯核,双变量只能使用高斯核
- vertical:若为True,密度图显示在x轴,即交换x-y轴
- bw:用于确定双变量图每个核的大小、标量因子
- cut:从极端数据点切割*bw
- cmap:控制核密度区域的递进色彩方案
- legend:若为True,添加图例
- ax:坐标轴的一些设置
- cbar:若为True且是双变量,那么添加颜色条;cbar_ax:指定绘制颜色条的坐标轴,若为空,则在主轴绘制
- cumulative:若为True,绘制累计分布
sns.set(style="darkgrid")
iris = sns.load_dataset("iris")
# 根据iris数据集species属性划分子集
setosa = iris.query("species == 'setosa'")
virginica = iris.query("species == 'virginica'")
f, ax = plt.subplots(figsize=(8, 8))
ax.set_aspect("equal")
# 两个核函数图
ax = sns.kdeplot(setosa.sepal_width, setosa.sepal_length,
cmap="Reds", shade=True, shade_lowest=False)
ax = sns.kdeplot(virginica.sepal_width, virginica.sepal_length,
cmap="Blues", shade=True, shade_lowest=False)
# 添加注释
red = sns.color_palette("Reds")[-2]
blue = sns.color_palette("Blues")[-2]
ax.text(2.5, 8.2, "virginica", size=16, color=blue)
ax.text(3.8, 4.5, "setosa", size=16, color=red)
plt.show()
如图:
5.rugplot() 将数组中的数据点绘制为轴上的数据
seaborn.rugplot(a, height=0.05, axis='x', ax=None, **kwargs)
:将一个array上的数据点绘制在轴上- a:array向量。输入观测值
- height:高度
- axis:绘制在x或y轴上
sns.set()
titanic = sns.load_dataset("titanic")
ax = sns.rugplot(a=titanic['age'],height=0.2,axis='y')
plt.show()
图,
四、Regression plots 回归图
1.lmplot() 回归模型图
sns.lmplot(x,y,data,row=None,col=None,……)
- 必要参数 x/y:变量名或向量,data:数据
- row/col:根据原数据某属性在行/列上分类(不同的图)
- col_wrap:指定图每行的张数,该参数最大只能等于col参数对应的不同类别的数量
- aspect:长宽比,长:宽=aspect,默认为1
- sharex/sharey:共享x/y轴,默认为true
- hue:根据hue值分类显示
- ci:控制回归的置信区间,ci=置信水平
- x_jitter/y_jitter:给x/y轴随机增加噪声点,不影响回归直线
- order:回归幂次,默认为一元线性回归,如=2是二元回归。
- palette:调色板,seaborn的颜色色板或颜色的字典。
# dataset为上面导入的数据集anscombe
sns.lmplot(x="x", y="y", col="dataset", hue="dataset", data=df,
col_wrap=2, ci=None, palette="muted", height=4,
scatter_kws={"s": 50, "alpha": 1})
plt.show()
下图为一个例子:
2.regplot() 线性回归图
seaborn.regplot(x, y, data=None, x_estimator=None, x_bins=None, x_ci='ci', scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, truncate=False, dropna=True, x_jitter=None, y_jitter=None, label=None, color=None, marker='o', scatter_kws=None, line_kws=None, ax=None)
:拟合一个线性回归图- x,y,data:同下
- x_estimator:将该函数应用在x的值上,绘制出估计值(如,
numpy.mean
) - x_bins:将x变量绘制成分离的bins,然后估计中心趋势和置信区间。形成的直方只会影响图上的散点而不会影响回归线的绘制,回归线仍然拟合的是原数据。当这个参数使用时,
x_estimator
默认是numpy.mean
。参数可以是大小相同的bins的数量(int)或bin中心的位置(vector) - x_ci:{‘ci’,‘sd’,int in [0,100] ,None}。‘ci’,使用ci参数的值;‘sd’,显示标准差(不会进行bootstrap);int,置信水平
- scatter:若为True,则绘制散点图
- fit_reg:若为True,绘制x和y之间的回归模型
- ci:(通过bootstrap得到的)置信水平,int in [0,100]。
- n_boot:bootstrap抽样次数以估计
- units:data中的变量名或数据的向量。当需要多层bootstrap抽样时指定用于抽样的单元
- order:多项式的阶数
- logistic:若为True,假设y是二元变量,估计一个逻辑回归模型
- lowess:若为True,估计一个非参数lowess(局部加权线性回归)模型。
- robust:若为True,估计鲁棒回归
- logx:若为True,估计y和log(x)的线性回归。(x必须为正数)
- {x,y}_partial:矩阵(与x相同的维度)或变量名。这些变量将在绘图前被去除
- truncate:若是False,则在绘制完散点图后将回归线填满x轴。若为True,将受到数据限制。
- x_jitter/y_jitter:给x/y轴随机增加噪声点,不影响回归直线
sns.set()
tips = sns.load_dataset("tips")
ax = sns.regplot(x="total_bill", y="tip", data=tips,marker="+",x_estimator=np.mean,x_bins=4)
plt.show()
图,
3.residplot() 线性回归残差图
seaborn.residplot(x, y, data=None, lowess=False, x_partial=None, y_partial=None, order=1, robust=False, dropna=True, label=None, color=None, scatter_kws=None, line_kws=None, ax=None)
:线性回归残差图。绘制残差的散点图和y与x的回归- x,y:向量或变量名
- data:DataFrame
- lowess:若为True,则拟合局部加权线性回归的残差散点图
- {x,y}_partial:矩阵(与x相同的维度)或变量名。这些变量将在绘图前被去除
- order:计算残差时拟合的多项式的阶数
- robust:若为True,拟合一个鲁棒线性回归
- dropna:若为True,拟合和绘图时忽略缺失值
- label:图例标签
sns.set(style="whitegrid")
rs = np.random.RandomState(7)
x = rs.normal(2, 1, 75)
y = 2 + 1.5 * x + rs.normal(0, 2, 75)
sns.residplot(x, y, lowess=True, color="g")
plt.show()
如图,
五、Matrix plots 矩阵图
1.heatmap() 热力图
seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt='.2g', annot_kws=None, linewidths=0, linecolor='white', cbar=True, cbar_kws=None, cbar_ax=None, square=False, xticklabels='auto', yticklabels='auto', mask=None, ax=None, **kwargs)
:绘制颜色编码矩阵,即热力图- data:输入数据。可以是numpy包的array,或pandas的DataFrame(index和column会对应于热力图的rows和columns)
- vmin,vmax:确定色彩映射的最大最小值,同时颜色条会显示出最大最小值。
- cmap:数据值到颜色的映射
- center:用于设置颜色条的分界线,可以调整整体图像的深浅。
- robust:若为True且vmin,vmax其中一个为空值,那么使用分位数而不是极值来计算色彩映射范围
- annot:是否在热力图单元格中显示数值(True or False)。也可以输入数组代替data中的数值
- fmt:上面的数值的格式
- annot_kws:annot为True时,一些对它的设置
- linewidths:指定隔开每个单元格的线宽度
- linecolor:指定隔开每个单元格的线的颜色
- cbar:是否绘制颜色条
- cbar_kws:颜色条的一些设置
- cbar_ax:指定绘制颜色条的轴,不指定则从主轴选择
- square:若为Ture,则使每个单元格为方形
- xticklabels/yticklabels:可以是{True,False,‘auto’,list,int}。若为True/False,绘制/不绘制列名称;若是列表,则用列表的值作为轴标签;若是整数,则使用列名称且之显示整数值个标签;若是’auto’,密集绘制不重叠的标签。
- mask:输入一个布尔值的数组,在为True的单元格中,屏蔽具有缺失值的单元格。
sns.set()
flights_long = sns.load_dataset('flights')
flights = flights_long.pivot('month', 'year', 'passengers')
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=True, fmt="d", linewidths=0.5,
linecolor='white', ax=ax)
plt.show()
下图为一个例子:
2.clustermap() 聚集图
seaborn.clustermap(data, pivot_kws=None, method='average', metric='euclidean', z_score=None, standard_scale=None, figsize=None, cbar_kws=None, row_cluster=True, col_cluster=True, row_linkage=None, col_linkage=None, row_colors=None, col_colors=None, mask=None, **kwargs)
:将矩阵数据集绘制成分层聚类的热力图- data:二维数据
- pivot_kws:可以为pivot提供关键字参数来创建一个矩形数组
- method:计算clusters的方法
- metric:数据所用的距离矩阵
- z_score:{0,1,None}.是否给行(0)或列(1)计算z分数(
=(x-mean)/std
) - standard_scale:{0,1,None}。行/列是否标准化(
=(x-min)/max
) - figsize:图的大小,含有两个元素的tuple
- cbar_kws:颜色条的一些设置
- {row,col}_cluster:若为True,将行/列聚集在一起
- {row,col}_linkage:为行/列预先计算连接矩阵。输入为
numpy.array
- {row,col}_color:用于评估一个组内的样本是否聚集在一起。可以使用嵌套列表或DataFrame进行多种颜色级别的标记。如果以DataFrame或Series的形式给出,则颜色的标签将从DataFrames列名或Series的名称中提取。DataFrame/Series颜色也通过它们的索引与数据匹配,以确保按正确的顺序绘制颜色。
- mask:输入一个布尔值的数组,在为True的单元格中,屏蔽具有缺失值的单元格。
sns.set()
iris = sns.load_dataset("iris")
ax = sns.clustermap(iris, cmap="mako")
plt.show()
图,
六、子图网格
1.FacetGrid()多图网格
FacetGrid是一个绘制多个图标的接口。步骤:
- 实例化对象
- 映射到具体seaborn图表类型(map)
- 添加图例
seaborn.FacetGrid(data, row=None, col=None, hue=None, col_wrap=None, sharex=True, sharey=True, height=3, aspect=1, palette=None, row_order=None, col_order=None, hue_order=None, hue_kws=None, dropna=True, legend_out=True, despine=True, margin_titles=False, xlim=None, ylim=None, subplot_kws=None, gridspec_kws=None, size=None)
- data:DataFrame数据
- row,col,hue:data中的变量名
- {row,col,hue}_order:给指定级别排序
- col_wrap:限制网格的列维度,以便列面跨越多行
- sharex/sharey:是否共享x/y轴
- height,aspect(宽:高),palette
- legend_out:如果为True,则图形尺寸将被扩展,图例将绘制在中间右侧的图形之外。
- despine:若为True,将移除顶部和右侧边缘框架
- margin_titles:若为True,则行变量标题将绘制在最后一列的右侧
- xlim/ylim:当sharex和sharey为True时,可以对轴进行限制
sns.set()
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", hue="smoker")
g = (g.map(plt.scatter, "total_bill", "tip", edgecolor="w").add_legend())
plt.show()
sns.set(style='white')
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="size", col_wrap=3,sharey=False,sharex=False)
g = (g.map(plt.hist, "tip", bins=np.arange(0, 13), color="c").set_titles("{col_name} diners"))
plt.show()
图,
2.PariGrid()成对关系的网格
seaborn.PairGrid(data, hue=None, hue_order=None, palette=None, hue_kws=None, vars=None, x_vars=None, y_vars=None, diag_sharey=True, height=2.5, aspect=1, despine=True, dropna=True, size=None)
:绘制成对关系的网格- vars:变量名的list。将使用这些变量;否则使用data中所有数值型变量
- x_vars/y_vars:变量名的list。分别用于行/列的变量
- dropna:在绘制前删除缺失值
sns.set(style='darkgrid')
iris = sns.load_dataset("iris")
g = sns.PairGrid(iris)
g = g.map_diag(plt.hist, edgecolor="w")
g = g.map_offdiag(plt.scatter, edgecolor="w", s=40)
plt.show()
sns.set(style='darkgrid')
iris = sns.load_dataset("iris")
g = sns.PairGrid(iris)
g = g.map_upper(plt.scatter)
g = g.map_lower(sns.kdeplot, cmap="Blues_d")
g = g.map_diag(sns.kdeplot, lw=3, legend=False)
plt.show()
图,