• matplotlib+seaborn图形绘制-学习整理


    1、设置figure对象

      命令:plt.figure(figsize=(10,5),frameon=False,clear=True)

        参数说明:matplotlib.pyplot.figure(

          num:图形序号(ID) ,不指定时自动递增。如果该图形已存在,则激活相应图形

          figsize :图形的长宽,美寸, tuple缺省为matplotlib.rcParams ["figure. figsize"1]

          dpi :图形分辨率,即每英寸所表示的像素数,缺省为rc figure.dpi保存图像时的dpi参数为matplotlib.rcParams ["savefig.dpi"]

          facecolor :图形背景色,缺省为rc figure. facecolor

          edgecolor :图形边框色,缺省为rc figure.edgecolor

          frameon = True :是否绘制图形外框架

          Figureclass :使用自定义的matplotlib.figure.Figure类

          clear = False :图形已存在时是否清除原有对象)

    2、散点图

      2.1、普通散点图

        命令:seaborn.scatterplot(x=ccss.s3,y=ccss.index1,hue=ccss.s2,legend='full',size=ccss.Qs9,alpha=0.1)

        参数说明:seaborn.scatterplot(

          x, y, hue : 按照hue进行分组;data :用于绘图的数据框

          hue_order :分类变量/hue变量类别取值的绘图顺序

          estimator = None :对y变量的汇总方式,为None时绘制所有原始值

          legend = 'brief' :图例的显示方式:"brief", "full", or False, optional

         基本绘图设定:  

          size :线段宽度所对应的变量/数值;sizes : list, dict, or tuple,用于进一步设置线宽如何确定

          size_norm :进一步指定数值的标准化方法用于线段宽度;size_order : list,线宽在各线段中的使用顺序

          style :线段形状所对应的变量/数值;style_order : list,线形的使用顺序

          markers :数据点的显示方式:boolean, list, or dictionary, optional

          palette : hue变量所对应的调色盘设定, dict/seaborn调色盘格式

          hue_norm :当hue变量为数值时,可进一步指定数值的标准化方法用于颜色映射

          alpha : float,散点的不透明度比例

          

      2.2、回归趋势散点图

      1、lmplot () :功能比较完备,可考察各种常见的线性/曲线回归趋势,可按照分类变量分组/分行列面板,并同时计算可信区间。

        命令:seaborn.lmplot("s3","index1",data=ccss,x_bins=10,x_estimator=np.mean)

        参数说明:seaborn.lmplot(

            x, y, data;hue:数据分组;palette : palette name, list, or dict, optional

            height:高度(in inches);aspett:宽高比

            markers : matplotlib marker,散点标记,有分组变量时提供list

            (x,y)_jitter : floats,绘图时对散点加入随机噪声,当数值为离散值时可以改善散点图效果

            truncate =False : bool,是否只在x取值范围内制回归线 

            order : int,所拟合曲线的阶数,大于1时使用numpy.polyfit进行曲线拟合

            logistic : bool,是否拟合logistic回归曲线

            lowess : bool,是否拟合lowess曲线

            robust : bool,是否拟合稳健回归

            logx : bool,是否拟合y ~ 1og (x)的对数曲线,但仍按照原始的x/y数值输出

          基本绘图设定:

            x_estimator :对x运用该函数并显示结果

            x_bins : int/vector,对变量x进行分箱,然后计算其集中趋势和ci该操作只影响散点图,不影响回归趋势线的估计

            x_ci : "ci", "sd", int in [0, 100] or None,计算的可信区间大小为ci时,另外使用ci参数给出百分比

            scatter : bool,是否绘制散点图

            fitreg : bool,是否拟合回归模型

            n_boot : int, Bootstrap抽样次数

            units: variable name in data,抽样基本单位对应的变量

            (x, y}_partial : strings in data/matrices,绘图/拟合时希望控制的协变量注意此处x/y的设定方向和一般使用习惯相反!

            {scatter, line)_kws : dict, plt.scatter和plt.plot中的其余参数

            

      2、线性回归残差图:rs = np.random.RandomState(7)

               x = rs.normal(2, 1, 75)

               y = 2 + 1.5 * x + rs.normal(0, 2, 75)

               seaborn.residplot(x, y, lowess=True, color="g")

           

      3、regplot ():可看作lmplot()的一个简单子集,绘制时使用一个Axes对象,无分行列面板考察的功能。

      4、jointplot():调用regplot()同时呈现回归趋势和单变量分布特征。

        命令:seaborn.jointplot(x="s3",y="index1",data=ccss,kind="reg",color="blue")

        参数说明:seaborn.jointplot(x, y:绘图用数据,可以是数据框内的变量名

            data =None :数据框名称

            kind = 'scatter':绘制的图形种类{scatter"  "reg"  "resid"  "kde"  "hex" }

            stat_func = :需要计算的统计量

          图形格式:

            color : matplotlib color;size =6:图形大小(默认方形)

            ratio =5 :联合图和边上的边际分布图宽度比例

            space =0.2:联合图和边际分布图中间的缝隙宽度

            dropna = True :是否删除缺失数据

            {x, y}lim : two-tuples, x/y轴的刻度范围

            {joint, marginal, annot}_kws : dicts,各图形元素的属性设定返回: JointGrid对象。

          seaborn.JointGrid对象的方法:

            annotate (func t, template, stat, 1oc]) 添加指定的统计量作为注解。

            plt(joint_func, marginal funct, annotfunc) 绘制完整图形。

            plot_joint (func, **kwargs) 绘制x和y的双变量图。

            plot-marginals (func, **kwargs) 分别绘制x和y的单变量图。

            savefig (*args, **kwargs) 保存图形。

            set axis labels ( [xlabel, ylabel])设置轴标签

            

      命令:seaborn.jointplot(x="s3",y="index1",kind="kde",color="m",data=ccss).plot_joint(plt.scatter,c="w",s=30,linewidth=1,marker="+")

            

      5、pairplot():将regplot ()和PairGrid()相结合,实现在矩阵中两两考察回归趋势的功能。

        命令:seaborn.pairplot(data=ccss,x_vars="s3",y_vars=["index1a","index1b"],kind="reg",hue="s2",height=4,aspect=1.5).map_upper(seaborn.scatterplot)

        参数说明:seaborn.pairplot(

            data:用于绘图的数据框;vars :可选,需要分析的变量列表,默认分析全部数值变量列。

            {x, y}_vars :用于分析的行/列变量,此时会生成非对称的矩阵图。

            kind ='scatter' :绘图种类, ('scatter', 'reg'}

            diag_kind ='auto' :主对角线绘图种类, ('hist', 'kde'}

          散点分组:

            hue:变量名字符串,该变量将在绘图时用颜色将散点进行分组。

            hue_order :分组变量各取值绘图时在调色板中的顺序, list格式。

            palette : hue变量所对应的调色盘设定, dict/seaborn调色盘格式。

          格式设定:

            markers :散点标记, hue分组时以1ist格式提供。

            height =2.5 :面板高度,英寸;aspect =1:面板宽度与高度之比, aspect * size即为面板宽度。

            dropna = True :绘图前是否删除缺失值。

            {plot, diag, grid}_kws : dicts, keyword arguments

          seaborn.PairGrid对象的方法:

            add-legend ([legend-data, title, labelorder]) 绘制图例

            map (func, **wargs) 指定所有单元格绘制的图形种类

            map_liag (func, **kwargs) 指定主对角线单元格绘制的单变量图形种类

            map-lower (func, **kwargs) 指定下三角单元格绘制的双变量图形种类

            map_offdiag (func, **kwargs) 指定非主对角线单元格绘制的双变量图形种类

            map_upper (func, **kwargs) 指定上三角单元格绘制的双变量图形种类

            savefig (*args, **kwargs) 保存图形

            set (**kwargs) 设置每一个subplot Axes对象的属性

            

    3、条图

      panads绘制:pd.value_counts(ccss.s5).plot.bar()

      matplotlib绘制:plt.bar(pd.value_counts(ccss.s5).index,pd.value_counts(ccss.s5))

      seaborn绘制:seaborn.barplot(x=pd.value_counts(ccss.s5).index,y=pd.value_counts(ccss.s5),order=['学生','公务员'])

        seaborn参数说明:seaborn.barplot(

          x, y,  names of variables in data ;data: DataFrameorder, hue

          order :分类变量/hue变量各类别取值的绘图顺序

        可信区间计算:

          ci=95 : float or "sd" or None,希望绘制的可信区间宽度

          n_boot = 1000 :计算ci时的bootstrap抽样次数。

          units :用于确定抽样单元大小的变量。

        误差条格式:

          errcolor ='0.26, : CI线段的颜色, matplotlib color

          errwidth : CI线段的粗细, float

          capsize :误差条顶端的宽度,占直条绘图区的比例, float

           

    4、饼图、半圆、圆环

        更详细参考链接:https://www.cnblogs.com/biyoulin/p/9565350.html

        pandas绘制圆:ccss.s5.value_counts().plot.pie()

        matplotlib绘制圆:plt.pie(ccss.s5.value_counts(),labels=ccss.s5.value_counts().index,explode=[0,0.5,1,0.5,0,0,0,0,0,0,0],shadow=True,startangle=90,radius=2,counterclock=False,rotatelabels=True)

        matplotlib绘制半圆:plt.pie(ccss.s5.value_counts(normalize=True)/2,labels=ccss.s5.value_counts().index)

        matplotlib绘制圆环:plt.pie(ccss.s5.value_counts(),labels=ccss.s5.value_counts().index,);plt.pie([1],colors=['#ffffff'],radius=0.6)

           参数说明:matplotlib.pie(

              explode:突出的距离,

              shadow:阴影,

              startangle:开始的度数,

              radius:半径,

              counterclock:逆时针开始旋转,

              rotatelabels:不旋转标签)

        

    5、条带图

      seaborn命令:seaborn.stripplot(y=ccss.s3[:200])

        参数说明:seaborn.stripplot(

            x, y, hue :绘图中所使用的分类/连续变量/颜色分组变量名;data:数据框名称

          绘制细节:

            order, hueorder : hue变量各类别取值的绘图顺序

            jitter = True :是否对散点位置进行随机抖动以避免重叠

            orient : "v" 1 "h",条带绘制方向

          其他设定:

            color : matplotlib颜色设定

            palette :调色盘设定

            size : float, optional 

            line float, optional 

            ax : matplotlib Axes, optional)

          

    6、直方图、kDE图、地毯图

        pandas绘制直方图:ccss.s3.plot.hist()

        matpoltlib绘制直方图:plt.hist(ccss.s3)

        seaborn绘制直方图:seaborn.distplot(ccss.s3,kde=False)

        seaborn绘制KDE图(更加精确):seaborn.kdeplot(ccss.s3,bw=1,label="bw=1")

          参数说明:seaborn.distplot(

              bins = None :组段数, matplotlib.pyplot.hist ()中使用的参数

              默认按照Ereedman-Diaconis自动计算

            绘制图形种类:

              hist = True :直方图

              kde = True : KDE图

              rug = False :地毯图

            图形细节:

              vertical = False :是否水平显示图形

              normhist = False :纵轴显示概率密度而不是原始频数

            其他设定:

              {hist, kde, rug, fit}_kws :字典类型,自定义对应图形元素的各类属性

              color : matplotlib颜色代码,指定绘图元素的颜色

              axlabel :轴标签

              label :图例中对应相应图形元素的标签

              ax:将图形绘制在指定的Aes对象内

              

    7、箱图

         seaborn绘制箱图:seaborn.boxplot(y=ccss.index1,saturation=0.3,width=0.5,linewidth=3,fliersize=10)

          参数说明:seaborn.boxplot(

              x, y, hue : names of variables in data or vector data, optional 

              data: DataFrame, array, or list of arrays, optional

              orient: "y" 1 "h", optional

              color : matplotlib color, optional

              palette : palette name, list, or dict, optional

              saturation =0.75 : float,箱体颜色的饱和度

              width=0.8 : float,箱体宽度所占比例

              fliersize= 5 : float,离群值散点大小

              linewidth = None : float,框线宽度

              whis =1.5 : float,离群值确定标准,距离IQR上下界的倍数)

              

        seaborn绘制增强箱图:seaborn.boxenplot(x=ccss.s2,y=ccss.s3,scale='area',outlier_prop=0.1)

          参数说明:seaborn.boxenplot(

            x, y, hue等参数

            k_depth = 'proportion' :具体的箱体位置算法

            "proportion" "tukey" | "trustworthy"

            scale = 'exponential’ :箱体宽度和样本量的对应关系

            "linear":等比例减少

            "exponential":对应箱体外侧未覆盖的样本比例

            "area":对应箱体本身覆盖的样本比例

            outlier_prop=0.007 :离群值在样本中的比例

                     

    8、提琴图

        seaborn绘制提琴图:seaborn.violinplot(y=ccss.s3)

          参数说明:seaborn.violinplot(

                x-None, y-None, hue-None, data-None, order-None, hue order-None

                bw= 'scott': KDE图的具体计算方法或者核宽度;{'scott', 'silverman', float}

                cut =2:绘图时是否超越网端的极值,设为0时严格限定在观测值范围内

                scale = 'area’, :各KDE图形设置为相同面积/按照频数设定宽度/相同宽度;{"area", "count", "width"}

                gridsize =100 :用于形成KDE曲线的散点数,越多越光滑

                width =0.8 :图形占的宽度比例inner ='box, :提琴图内部呈现的图形种类,箱图/分位数/原始数据。{"box", "quartile", "point", "stick", None}

                saturation =0.75 :图形色彩饱和度。)

            

    9、线图

        seaborn绘制线图:seaborn.lineplot('s4','index1',data=ccss,hue='s2',ci=None,style='s0',size='s0',)

          参数说明:seaborn.lineplot(

            注意:x轴y轴需要连续变;x, y, hue : names of variables in data;data:用于绘图的数据框

              order, hue_order :分类变量/hue变量各类别取值的绘图顺序

              estimator = 'mean' :对y变量的汇总方式,为None时绘制所有原始值

              sort =True:绘图前数据是否按照x和y轴变量排序,否则将按照数据原始顺序绘制绝大多教情况下,按照原始数据绘制的图形并无意义

              legend = 'brief' :图例的显示方式,"brief", "full", or False

            格式设定:

              size :线段宽度所对应的变量/数值

              sizes : list, dict, or tuple,用于进一步设置线宽如何确定

              size-norm :进一步指定数值的标准化方法用于线段宽度

              size-order : list,线宽在各线段中的使用顺序

              style :线段形状所对应的变量/数值

              dashes = True :针对style变量的线形绘制设定;boolean, list, or dictionary

              style_order : list,线形的使用顺序

              markers :数据点的显示方式:boolean, list, or dictionary

              palette : hue变量所对应的调色盘设定, dict/seaborn调色盘格式

              hue_norm :当hue变量为数值时,可进一步指定数值的标准化方法用于颜色映射

           可信区间计算:

              ci = 95: float or "sd" or None,希望绘制的可信区间宽度

              n_boot=1000 :计算CI时的bootstrap抽样次数

              urits :用于确定抽样单元大小的变量

              err_style = 'band': "band" or "bars",代表c1的误差条的显示方式

              err_band : dict of keyword arguments,进一步控制误差条的显示方式;具体参数来自于ax.fill between或ax.errorbar

             

    10、误差图、面积图

        seaborn绘制误差图:seaborn.pointplot(ccss.time,ccss.index1,capsize=.1)

            

        标准的误差图:seaborn.pointplot(ccss.time,ccss.index1,capsize=.1,join=False)

            

        分组、不需要可信区间:seaborn.pointplot(ccss.time,ccss.index1,data=ccss,capsize=.1,hue='s0',ci=None)

            

        增加线形修饰:seaborn.pointplot(ccss.time,ccss.index1,data=ccss,capsize=.1,hue='s0',ci=None,linestyles=['-','--',':'])

            

        错开ci的位置便于观察:seaborn.pointplot(ccss.time,ccss.index1,data=ccss,capsize=.1,hue='s0',linestyles=['-','--',':'],dodge=True)

            

        panads绘制面积图:ccss.groupby('a3').index1.mean().plot.area()

            

         按照百分比绘图:pd.crosstab(index=ccss.s4,normalize='index',columns=ccss.O1).plot.area()

            

    11、pp图

        pp图是将变量实际分布累计概率与所指的理论分布累计概率分别作为横纵坐标而绘制的散点图,用于直观地检测样本数据是否符合某一概率分布

          plt.scatter(df.cprob,df.cprob0)

        

    12、qq图

        Q-Q图只是直观观察,更精确的考察需要使用假设检验,Q代表分位数,将两个概率分布同一个位置的分位数值作为平面坐标进行绘图,该分位值就构成平面中的一个散点,而全体分位数的比较结果就可以构成一张图形。

          from scipy import stats

          stats.probplot(ccss.s3,plot=plt)

         

    13、pareto图

        pareto本质上是原始指标的条图和累计百分比的线图的组合,绘制关键点:计算相应的累计百分比,将相应的两个图形用双轴图的形式组合起来

          data.plot.bar(color = 'b')

          prob.plot(color = 'g',secondary_y = True,style = '-0',linewidth =2)

         

    14、雷达图    

        雷达图属于极坐标的范畴,用极坐标绘制即可

    data = ccss.s5.value_counts(sort=False,normalize=True)
    # 生成绘图用的弧度数据,注意跳开终点数值
    import numpy as np
    # 将数据等分
    angles = np.linspace(0,2*np.pi,len(data),endpoint=False)
    # 添加终点值,使曲线坐标闭合
    data1 = np.concatenate((data,[data[0]]))
    angles = np.concatenate((angles,[angles[0]]))
    fig = plt.figure()
    ax = fig.add_subplot(111,polar=True)
    ax.plot(angles,data1)

          

    15、复合饼图    

    # 生成绘图数据
    data = pd.crosstab(ccss.s2, ccss.s5)
    # 控制圆环配色,考虑使用等分的husl配色方案以免重复
    colorlist = seaborn.color_palette('husl', n_colors=len(data.columns))
    # 设定圆环宽度
    size = 0.3
    plt.pie(data.iloc[0, :], radius=1, wedgeprops=dict(width=size, edgecolor='w'), colors=colorlist, labels=data.columns)
    plt.pie(data.iloc[0, :], radius=1 - size, wedgeprops=dict(width=size, edgecolor='w'), colors=colorlist )

          

    16、热图

    plt.figure(figsize=(10,10))
    # margins对数据进行排序
    data = ccss.pivot_table(index='s9',columns='s5',values='index1',margins=True)
    # 去掉汇总列
    data = data.iloc[:,:-1]
    # 对数据进行排序
    data.sort_values(by='All',axis='columns',inplace=True)
    seaborn.heatmap(data.iloc[:-1,:],square=True,cmap='YlGnBu',annot=True,fmt='.3g')

          参数说明:seaborn.heatmap(

              data : rectangular dataset,用于绘制热图的数据框/ndarray,如果提供Pandas数据框,则行/列名称将用于绘图,成为行/列标签

            调色板:

              vmin, vmax : floats, colormap的取值范围

              cmap: matplotlib colormap名称

              center: float, colormap的中间值

              robust: bool, 当vmin或vmax缺省时,是否使用分位数而不是极值来更稳健的估计colormap range

            注释与标签:

              annot : bool or rectangular dataset,是否在单元格中显示数值

              fmt = ".2g' : string,添加注释时的格式

              annot kws: dict of key, value mappings, optional

              xticklabels, yticklabels = 'auto' :行/列标签的设定方式"auto", bool, list-like, or int, optional

            框线与色带:

              lnewidths =0: float,格框线宽度

              linecolor = 'white' : col,单元格框线颜色

              cbar = True : boolean,是否绘制色带

              cbar_kws: dict of key, Keyword arguments for fig.colorbar.

              cbar_ax :用于绘制色带的Axes对象名称,否则将在主Axes对象中绘制

              square : boolean,是否强制设定每个单元格为正方形

          

    17、多边形

        matplotlib.patches.circle(center = (0.0, 0.0), radius = 1.0,)  圆形:中心坐标,半径,是否只读

        matplotlib.patches.Ellipse(xy, width, height,angle = 0.0)  椭园:中心坐标,宽度,高度,起始角度

        matplotlib.patches.Rectangle(xy, width, height, angle = 0.0)  矩形:中心坐标,宽度,高度,起始角度

        matplotlib.patches.RegularPolygon(xy, numVertices, radius = 5, orientation = 0)  正多边形:中心坐标,边数,距离中心的长度,起始弧度

        matplotib.patches.Wedge(center, r, theta1, theta2, width = None)  扇形:中心坐标,半径,起始角度,终止角度,弧形宽度

    fig,ax = plt.subplots()
    circle  = patches.Circle(np.array([0,0]), radius = 1.0,color='g')
    RegularPolygon = patches.RegularPolygon(np.array([0,0]),9,0.2)
    ax.add_patch(circle)
    ax.add_patch(RegularPolygon)
    # 设置等比例
    ax.axis('equal')

          

  • 相关阅读:
    Linux常用命令
    Linux静态函数库与动态函数库
    解决MySQL5.7的表无法插入中文的问题
    MySQL与postgreSQL在left join查询时的区别
    《刻意练习》读书笔记
    在Golang中实现与Python装饰器类似功能的方法
    项目中使用进程内缓存的一些经验及注意事项
    Golang中使用recover捕获panic的操作及遇到的一个坑
    Python与Golang中给列表中字典按照某个key排序的实现
    浅谈Python与Golang中的“延迟绑定机制”
  • 原文地址:https://www.cnblogs.com/wu-wu/p/13998658.html
Copyright © 2020-2023  润新知