暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python seaborn绘图--直方图和密度曲线图、散点图、箱线图、小提琴图、柱状图、回归图以及可视化中的颜色使用

糟老头修炼记 2020-04-29
6329

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"))


                                                                                                                文章转载自糟老头修炼记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                                                                评论