• 第六章-Python数据可视化--2


    **

    数值型变量的可视化

    **

    本篇是数据可视化系列中的第二篇,承接上文,本文主要介绍如何使用matplotlib模块、pandas模块和seaborn模块绘制直方图、核密度图、箱线图、小提琴图、折线图以及面积图。

    一.直方图和核密度曲线

    1.matplotlib模块

    plt.hist(x,bins=10,range=None,normed=False,weights=None,
             cumulative=False,bottom=None,histtype='bar',
             align='mid',orientation='vertical',rwidth=None,
             log=False,color=None,label=None,stacked=False)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    x : 指定要绘制直方图的数据。
    bins : 指定直方图条形的个数。
    range : 指定直方图数据的上下界,默认包含绘图数据的最大值和最小值。
    normed : 是否将直方图的频数转换为频率。 (如果报错的话,就用desnity替代)
    weights : 该参数可为每一个数据点设置权重。
    cumulative : 是否可以计算累计频数或频率。
    bottom : 可以为直方图的每个条形添加基准线,默认为0.
    histtype : 指定直方图的类型,默认为bar , 除此之外还有barstacked、step、stepfilled。
    align : 设置直方图的摆向方向,默认为垂直方向。
    rwidth : 设置直方图条形的宽度。
    log : 是否需要对绘图数据进行log变换。
    color : 设置直方图的填充色。
    edgecolor : 设置直方图边框色。
    label : 设置直方图的标签,通过legend展示图例。
    stacked : 当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放。

    在这里插入图片描述

    2.pandas模块

    对于matplotlib模块的直方图,如果想加入核密度图就会很吃力,pandas可以很好的将两者结合在一起。
    在这里插入图片描述

    3.seaborn模块
    尽管这幅图满足了两种图形的合成,但是表达的是所有乘客的年龄分布,如果老板想看按性别分组,研究不同性别下年龄分布的差异,前两个模块都会很复杂实现起来,这里就推荐使用seaborn中的displot函数。

    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)
    
    
    • 1
    • 2
    • 3
    • 4

    a : 指定绘图数据,可以是序列、一维数组或是列表。
    bins : 指定直方图条形的个数。
    hist : bool类型,是否绘制直方图,默认为Ture。
    kde : bool类型,是否绘制核密度图,默认为True。
    rug : bool类型的参数,是否绘制须图(如果数据比较密集,该参数比较有用),默认为False。
    fit : 指定一个随机分布对象(需调用scipy模块中的随机分布函数),用于绘制随机分布的概率曲线。
    hist_kws : 以字典的形式传递直方图的其他修饰属性,如填充色、边框色、宽度等。
    kde_kws : 以字典的形式传递核密度图的其他修饰属性,如线的颜色、线的类型等。
    rug_kws : 以字典的形式传递须图的其他修饰属性,如线的颜色、线的宽度等。
    fit_kws : 以字典的形式传递概率密度曲线的其他修饰属性,如线条颜色、形状、宽度等。
    color : 指定图形的颜色,除了随机分布曲线的颜色。
    vertical : bool类型,是否将图形垂直显示,默认为True。
    norm_hist : bool类型,是否将频数改为频率,默认为False。
    axlabel : 用于显示轴标签。
    ax : 指定子图的位置。

    在这里插入图片描述

    在这里插入图片描述

    二.箱线图

    箱线图是另一种体现数据分布的图形,从图中可以得到数据的下须值(Q1-1.5IQR)、下四分位数(Q1)、中位数(Q2)、均值,上四分位(Q3)数和上须值(Q3+1.5IQR)。同样的,matplotlib、pandas、seaborn模块均可完成。

    在这里插入图片描述

    1.matplotlib

    plt.boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,
                widths=None,patch_artist=None,meanline=None,showmeans=None,
                boxprops=None,labels=None,flierprops=None,medianprops=None,
                meanprops=None,capprops=None,whiskerprops=None)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    x : 指定要绘制箱线图的数据。
    north : 是否要以凹口的形式展现箱线图,默认为凹口。
    sym : 指定异常点的形状,默认为+号显示。
    vert : 是否需要将箱线图垂直摆放,默认为垂直摆放。
    whis : 指定上下须与上下四分位的距离,默认为1.5倍的四分位差。
    position : 指定箱线图的位置,默认为[0 , 1 , 2 …]。
    widths : 指定箱线图的宽度,默认为0.5.
    patch_artist : bool类型,是否填充箱体的颜色,默认false。
    meanline : bool类型,是否用线的形式表示均值,默认为False。
    showmeans : bool类型,是否显示均值,默认为False。
    showcaps : bool类型,是否显示箱线图顶端和末端的两条线(即上下须),默认为True。
    showbox : bool类型,是否显示箱线图的箱体,默认为True。
    showfilers : 是否显示异常值,默认为True。
    boxprops : 设置箱体的属性,如边框色、填充色等。
    labels : 为箱线图添加标签,类似图例。
    filerprops : 设置异常值的属性,如异常点的形状、大小、填充色等。
    medianprops : 设置中位数的属性,如线的类型、粗细等。
    meanprops : 设置均值的属性,如点的大小、颜色等。
    capprops : 设置箱线图顶端和末端线条的属性,如颜色、粗细等。
    whiskerprops : 设置须的属性,如颜色、粗细、线的类型等。

    在这里插入图片描述

    分析一下此箱线图:
    图中上下两条横线代表上下须,箱体的上下两条横线代表上下四分位数,箱体中的虚线是中位数,箱体内的点为均值,上下须两端的点代表异常值。

    通过均值和中位数对比得知数据微微右偏。
    (如果数据近似正态分布,则众数=中位数=均值,右偏,众数<中位数<均值,左偏,众数>中位数>均值。

    上面是二手房整体单价的箱线图,不常见,常用的是分组箱线图,即二手房单价按照其他分组变量进行对比分析。

    在这里插入图片描述

    seborn模块类似,用时自己查就可以,这里不做详细介绍。

    三.小提琴图

    小提琴图相当于数值型数据的核密度图与箱线图融合一起,matplotlib的小提琴图不包含一个完整的箱线图,所以这里直接使用seaborn中的violinplot函数绘制小提琴图。

    sns.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=‘box’,split=False,dodge=True,orient=None,
    linewidth=None,color=None,palette=None,saturation=0.75,ax=None
    )

    x : x轴数据。
    y : y轴数据。
    hue : 指定一个分组变量。
    data : 指定绘制小提琴图的数据集。
    hue_order : 传递一个字符串列表,用于分类变量的排序。
    bw : 制定核密度估计的带宽,带宽越大,密度曲线越平滑。
    scale : 用于调整图的左右宽度,如果为area , 表示每个小提琴图的左右部分拥有相同的面积;如果为count , 则表示根据样本数量来调节宽度;如果为width , 则表示每个小提琴图左右两部分拥有相同的宽度。

    scale_hue : bool类型,当使用hue参数时,是否对hue变量的每个水平做标准化处理,默认为True。
    width : 使用hue参数时,用于控制小提琴图的宽度。
    inner : 指定小提琴图内部数据点的形态。如果为box,则表示绘制微型的箱线图;如果为quartiles,则表示绘制四分位的分布图;如果为point或stick,则表示绘制点或小竖条。

    split : bool类型,使用hue参数时,将小提琴图从中间分为两个不同的部分,默认为False。
    dodge : bool类型,当使用hue参数时,是否绘制水平交错的小提琴图,默认为True。
    orient : 指定小提琴图的呈现方向,默认垂直。
    linewidth:指定小提琴图的所有线条宽度,。
    color : 指定小提琴图的颜色,该参数与palette一起使用的时候无效。
    palette : 指定hue变量的区分色。
    saturation : 指定颜色的透明度。
    ax : 指定子图的位置。

    在这里插入图片描述

    四.折线图

    同样还是三个模块均可绘制,但seaborn中的tsplot函数用起来不方便,因此这里仅介绍matplotlib和pandas实现折线图的方法。

    1.matplotlib

    plt.plot(x , y , linestyle , linewidth , color , marker , 
             markersize , markerergecolor , markerfactcolor ,
             markeredgewidth , label , alpha)
    
    
    • 1
    • 2
    • 3
    • 4

    x : 指定折线图的x轴数据。
    y : 指定折线图的y轴数据。
    linestyle : 指定折线图的类型,实线、虚线、点虚线、点点线等等,默认为实现。
    linewidth : 指定折线的宽度。
    marker : 可以为折线图添加点,该参数是设置点的形状。
    markersize : 点的大小。
    markeredgecolor : 点的边框色。
    markerfactcolor : 点的填充色。
    markeredgewidth : 点的边框宽度。
    label : 为折线图添加标签,类似于图例的作用。

    在这里插入图片描述

    这里用‘-’ 表示实线,用’o’ 表示空心圆点,当然还有很多中其他的表示,这里不一一列举,用的时候直接查,然后往里面套就行。

    但是上面一幅图其实是只显示了阅读人数,想要实现一张图里阅读人数和阅读人次两条曲线的比较,可以使用如下方法:
    在这里插入图片描述

    2.pandas
    在这里插入图片描述

    虽然plot 部分看起来很简单,但前提是要将表中的数据进行处理,将三条折线图的数据分别为数据框的三个字段才行,这里用到了数据框pivot_table方法,将原始的数据处理成满足条件的一张透视表。

    关于pivot_table 函数的用法,其实很简单,随便搜一搜就会了!

  • 相关阅读:
    03. Java 条件查询
    Android NDK篇-C++ 自定义命名空间与拷贝构造函数
    `Algorithm-Solution` `AcWing` 4726. 寻找数字
    力扣1901.寻找峰值II
    2.3进程的三状态和五状态
    PUPU TECH 第12期技术沙龙 ✘深圳站
    算法刷题网站总结
    mysql命令行连接数据库
    求职攻略| 硬核公司的硬件笔试题长什么样?先来5道选择题
    静态时序分析简明教程(六)]时钟组与其他时钟特性
  • 原文地址:https://blog.csdn.net/qq_43504141/article/details/127233892