Seaborn常用绘图函数-sjs

Seaborn常用绘图函数

介绍

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:int或list,控制直方图的划分
#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],区间外的值不计入。

在这里插入图片描述

  • 通过hist和kde参数调节是否显示直方图及核密度估计(默认hist,kde均为True)
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])  #不显示核密度

在这里插入图片描述

  • rug:控制是否生成观测数值的小细条
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]) #右图

在这里插入图片描述

  • fit:控制拟合的参数分布图形,能够直观地评估它与观察数据的对应关系(黑色线条为确定的分布)
x = np.random.randn(100) #返回100个数 且符合正态分布
# from scipy.stats import *
sns.distplot(x,hist=False,fit=norm) #拟合标准正态分布 黑色线

在这里插入图片描述

  • vertical=True,color=“y”:控制图像的横竖摆放,图中颜色显示
sns.distplot(x,vertical=True,color="y")

在这里插入图片描述

  • norm_hist:若为True, 则直方图高度显示密度而非计数(含有kde图像中默认为True)
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]) #右图

在这里插入图片描述

内容解读:

  • sns.distplot(x) 对单变量X直接绘制出直方图,并绘制概率拟合曲线
  • Y轴代表概率密度
  • 每个柱子的面积代表概率,面积和=1
  • distplot支持3种格式数据:pandas.series、numpy中的1darray以及普通的list类型

================================================================

(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=<function pearsonr>,
              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=<function pearsonr>,
              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)  #右图

在这里插入图片描述

参考

  • https://seaborn.apachecn.org/#/docs/21

备注

  • 有时作图时,会有图片标题中文显示乱码的问题,可以使用这行代码解决:
plt.rc("font",family="SimHei",size="12") 
  • 如果X的维度名称太长可以使用倾斜45度处理
plt.xticks(rotation=45)
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值