seaborn是基于Matplotlib的Python数据可视化库。它提供了一个高级界面,用于绘制引人入胜且内容丰富的统计图形,在Matplotlib上进行了更高级的API封装,从而使作图更加容易
sns.set_style("whitegrid") 横坐标有标线,纵坐标没有标线,背景白色
sns.set_style("darkgrid") 默认,横纵坐标都有标线,组成一个一个格子,背景稍微深色
sns.set_style("dark") 背景稍微深色,没有标线线
sns.set_style("white") 背景白色,没有标线线
sns.set_style("ticks") xy轴都有非常短的小刻度
sns.despine(offset=30,left=True) 去掉上边和右边的轴线,offset=30表示距离轴线(x轴)的距离,left=True表示左边的轴保留
(1): 单变量分布图 - sns.distplot
sns.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)
参数解读
#bins
x = np.random.randn(100) #返回100个数 且符合正态分布
fig,axes=plt.subplots(1,2)
sns.distplot(x,kde=False,bins=20,ax=axes[0]) #分成20个区间
sns.distplot(x,kde=False,bins=[x for x in range(4)],ax=axes[1]) #以0,1,2,3为分割点,形成区间[0,1],[1,2],[2,3],区间外的值不计入。
x = np.random.randn(100) #返回100个数 且符合正态分布
fig,axes=plt.subplots(1,3) #创建一个1行三列的图片
sns.distplot(x,ax=axes[0])
sns.distplot(x,hist=False,ax=axes[1]) #不显示直方图
sns.distplot(x,kde=False,ax=axes[2]) #不显示核密度
x = np.random.randn(100) #返回100个数 且符合正态分布
fig,axes=plt.subplots(1,2) #创建一个1行2列的图片
sns.distplot(x,rug=True,ax=axes[0]) #左图
sns.distplot(x,ax=axes[1]) #右图
x = np.random.randn(100) #返回100个数 且符合正态分布
# from scipy.stats import *
sns.distplot(x,hist=False,fit=norm) #拟合标准正态分布 黑色线
sns.distplot(x,vertical=True,color="y")
x = np.random.randn(100) #返回100个数 且符合正态分布
fig,axes=plt.subplots(1,2) #创建一个1行2列的图片
sns.distplot(x,norm_hist=True,kde=False,ax=axes[0]) #左图
sns.distplot(x,kde=False,ax=axes[1]) #右图
内容解读:
================================================================
(2):双变量分布图 散点图 - serborn.jointplot
serborn.jointplot(x,y,data=None,kind=“scatter”,color=None,size=6,
ratio=5,space=0.2,dropna=True,xlim=None,ylim=None,joint_kws=None,
marginal_kws=None,annot_kws=None,**kwargs)
参数解读:
sns.jointplot(x=df['A'], y=df['B'], #设置xy轴,显示columns名称
data = df, #设置数据
color = 'b', #设置颜色
s = 50, edgecolor = 'w', linewidth = 1,#设置散点大小、边缘颜色及宽度(只针对scatter)
kind = 'scatter',#设置类型:散点图'scatter' ,'reg','resid',密度图'kde',六边形图'hex'
space = 0.1, #设置散点图和布局图的间距
size = 8, #图表大小(自动调整为正方形))
ratio = 5, #散点图与布局图高度比,整型
marginal_kws = dict(bins=15, rug =True),) #设置柱状图箱数,是否设置rug
举例:
rs = np.random.RandomState(2)
df = pd.DataFrame(rs.randn(200,2), columns = ['A','B'])
fig,axes=plt.subplots(3,1) #创建一个1行2列的图片
sns.jointplot(x=df['A'], y=df['B'], #设置xy轴,显示columns名称
data = df, #设置数据
color = 'b', #设置颜色
# s = 50, edgecolor = 'w', linewidth = 1,#设置散点大小、边缘颜色及宽度(只针对scatter)
# stat_func=sci.pearsonr,
kind = 'hex',#设置类型:散点图'scatter' ,'reg','resid',,密度图'kde',六边形图'hex'
#stat_func=,
space = 0.1, #设置散点图和布局图的间距
size = 8, #图表大小(自动调整为正方形))
ratio = 5, #散点图与布局图高度比,整型
marginal_kws = dict(bins=15, rug =True),) #设置柱状图箱数,是否设置rug
rs = np.random.RandomState(2)
df = pd.DataFrame(rs.randn(200,2), columns = ['A','B'])
fig,axes=plt.subplots(3,1) #创建一个1行2列的图片
sns.jointplot(x=df['A'], y=df['B'], #设置xy轴,显示columns名称
data = df, #设置数据
color = 'b', #设置颜色
s = 50, edgecolor = 'w', linewidth = 1,#设置散点大小、边缘颜色及宽度(只针对scatter)
# stat_func=sci.pearsonr,
kind = 'scatter',#设置类型:'scatter','reg','resid','kde','hex'
#stat_func=,
space = 0.1, #设置散点图和布局图的间距
size = 8, #图表大小(自动调整为正方形))
ratio = 5, #散点图与布局图高度比,整型
marginal_kws = dict(bins=15, rug =True),) #设置柱状图箱数,是否设置rug
=================================================================
(3):双变量分布图 曲线图 - seaborn.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)
参数解读:
seaborn.relplot(
x=None, y=None, #x, y:data中的变量名 输入数据的变量;数据必须为数值型。
hue=None, #将会产生具有不同颜色的元素的变量进行分组。这些变量可以是类别变量或者数值型变量
size=None, #用粗细表现出分组的不同。可以是分组或数字(10, 100)
style=None, #cue 虚线 stim实线 也可以是分组
data=None, #DataFrame
row=None, col=None, #col列分组 row行分组
col_wrap=None, #int这个变量设置可以将多列包装以多行的形式展现(有时太多列展现,不便利),但不可以将多行以多列的形式展现。
row_order=None,col_order=None, #以此顺序组织网格的行和/或列,否则顺序将从数据对象中推断
palette=None, #["b", "r"] 列表格式 对不同分组设定不同颜色
hue_order=None, #列表 指定hue变量层级出现的顺序 否则会根据数据确定
hue_norm=None, #元组或者 Normalize 对象
sizes=None, #列表、字典或者元组 当使用sizes时,用于确定如何选择尺寸。此变量可以一直是尺寸值的列表或者size变量的字典映射。
#当size为数值型时,此变量也可以是指定最小和最大尺寸的元组,这样可以将其他值标准化到这个范围
size_order=None, #列表 指定size变量层次的表现顺序,不指定则会通过数据确定。当size变量为数值型时与此无关
size_norm=None, #元组或者 Normalize 对象 当size变量为数值型时,用于数据单元的 scaling plot 对象的标准化
legend='brief', #“brief”, “full”, 或者 False,
#用于决定如何绘制坐标轴。如果参数值为“brief”, 数值型的hue以及size变量将会被用等间隔采样值表示。
#如果参数值为“full”, 每组都会在坐标轴中被记录。如果参数值为“false”, 不会添加坐标轴数据,也不会绘制坐标轴。
kind='scatter', #可选项为(scatter 散点图 及line 曲线图).
height=5, #每个 生成图 的高度
aspect=1, #每个 生成图 的长宽比
)
举例:
sns.relplot(x="timepoint", y="signal", data=df, kind="line")
================================================================
(4)条形图 sns.barplot()
countplot参数和barplot基本差不多,可以对比着记忆,有一点不同的是countplot中不能同时输入x和y,且countplot没有误差棒,类别特征barplot要同时传入x,y
seaborn.barplot(x=None, y=None, hue=None,
data=None, order=None, hue_order=None, 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)
参数解读:
seaborn.barplot(x=None, y=None, #数据X,Y轴传值
hue=None, #数据分组变量名
data=None, #DataFrame,数组或数组列表
order=None, hue_order=None, #显式指定分类顺序,order=[字段变量名1,字段变量名2,...]
ci=95, #在估计值附近绘制置信区间的大小
n_boot=1000, #计算置信区间时使用的引导迭代次数
orient=None, # 横v\纵h 图的显示方向(垂直或水平,即横向或纵向)
color=None, #颜色
palette=None, #调试板名称,列表或字典类型
saturation=0.75, #饱和度:float
errcolor='.26', #表示置信区间的线条颜色
errwidth=None, #float 表示误差线的厚度
capsize=None, #float 表示误差线上"帽"的宽度(误差线上的横线的宽度)
dodge=True,
ax=None,
**kwargs
)
举例:
sns.barplot(x=df.A, y=df.B,hue=df.C,data=df)
#palette:调色板,控制不同的颜色style
fig,axes=plt.subplots(2,1)
sns.barplot(x="color",y="age",data=data,ax=axes[0]) #上图
sns.barplot(x="color",y="age",data=data,palette="Set3",ax=axes[1]) #下图
#capsize(float): 设置误差棒帽条(上下两根横线)的宽度
fig,axes=plt.subplots(1,2)
sns.barplot(x="color",y="age",data=data,ax=axes[0],capsize=.2) #左图
sns.barplot(x="color",y="age",data=data,ax=axes[1],capsize=.9) #右图
plt.rc("font",family="SimHei",size="12")
plt.xticks(rotation=45)