美文网首页数据蛙数据分析每周作业呆鸟的Python数据分析Python小推车
matplotlib绘制箱型图、误差棒图、堆积图等图形

matplotlib绘制箱型图、误差棒图、堆积图等图形

作者: estate47 | 来源:发表于2019-04-29 18:31 被阅读5次

    1.箱型图
    箱型图是由一个箱体和一对箱须所组成的统计图形。箱体由第一四分位数、中位数(第二四分位数)和第三四分位数所组成的。在箱须的末端之外的数值可以理解成离群值,因此,箱须是对一组数据范围的大致直观描述。

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    mpl.rcParams["font.sans-serif"]=["SimHei"]
    mpl.rcParams["axes.unicode_minus"]=False
    
    testA = np.random.randn(5000)
    testB = np.random.randn(5000)
    
    testList = [testA,testB]#绘制箱线图输入数据
    labels = ["随机数生成器AlphaRM","随机数生成器BetaRM"]
    colors = ["#1b9e77","#d95f02"]
    
    whis = 1.6
    width = 0.35
    bplot = plt.boxplot(testList,
                        whis=whis,#四分位间距的倍数,用来确定箱须包含数据的范围大小
                        widths=width,#设置箱体的宽度
                        sym="o",#离群值的标记样式
                        labels=labels,#绘制每一个数据集的刻度标签
                        patch_artist=True)#是否给箱体添加颜色
    for patch,color in zip(bplot["boxes"],colors):
        patch.set_facecolor(color)
    plt.ylabel("随机数值")
    plt.title("生成器抗干扰能力的稳定性比较")
    
    plt.grid(axis="y",ls=":",lw=1,color="gray",alpha=0.4)
    plt.show()
    
    箱型图

    我们将关键字参数notch的参数值设置为True,其他语句不变,那么箱体就会变成有“V”型凹痕的箱体了。


    V型箱体

    水平方向的箱型图

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    mpl.rcParams["font.sans-serif"]=["SimHei"]
    mpl.rcParams["axes.unicode_minus"]=False
    
    x = np.random.randn(1000)
    plt.boxplot(x,vert=False)
    plt.xlabel("随机数值")
    plt.yticks([1],["随机数生成器AlphaRM"],rotation=90)
    plt.title("随机数生成器抗干扰能力的稳定性")
    
    plt.grid(axis="x",ls=":",lw=1,color="gray",alpha=0.4)
    plt.show()
    
    水平方向

    不绘制离群值的水平放置的箱型图,修改下面语句即可:

    plt.boxplot(x,vert=False,showfliers=False)
    
    无离群值

    2.误差棒图
    在很多科协实验中都存在测量误差或是试验误差,这是无法控制的客观因素。在可视化试验结果的时候,最好可以给试验结果增加观测结果的误差以表示客观存在的测量偏差。误差棒图就是运用在这一场景中的很理想的统计图形。

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(0.1,0.6,10)
    y = np.exp(x)
    error = 0.05+0.15*x
    lower_error = error
    upper_error = 0.3*error
    error_limit = [lower_error,upper_error]
    
    plt.errorbar(x,y,yerr=error_limit,fmt=":o",
                 ecolor="y",elinewidth=4,
                 ms=5,mfc="c",mec="r",
                 capthick=1,capsize=2)
    # yerr单一数值的非对称形式误差范围;fmt数据点的标记样式和数据点标记的连接线样式
    # ecolor误差棒的颜色线条颜色;elinewidth误差棒的线条粗细;ms数据点的大小;mfc数据点的标记颜色
    # mec数据点的标记边缘颜色;capthick误差棒边缘横杠的厚度;capsize误差棒边缘横杠的大小
    plt.xlim(0,0.7)
    plt.show()
    
    误差棒图

    带误差棒的柱状图

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    mpl.rcParams["font.sans-serif"]=["SimHei"]
    mpl.rcParams["axes.unicode_minus"]=False
    x = np.arange(5)
    y = [100,68,79,91,82]
    std_err = [7,2,6,10,5]
    error_attri = dict(elinewidth=2,ecolor="black",capsize=3)
    plt.bar(x,y,
            color="c",
            width=0.6,
            align="center",
            yerr=std_err,
            error_kw=error_attri,
            tick_label=["园区1","园区2","园区3","园区4","园区5"])
    plt.xlabel("芒果种植区")
    plt.ylabel("收割量")
    plt.title("不同芒果种植区的单次收割量")
    plt.grid(True,axis="y",ls=":",color="gray",alpha=0.2)
    plt.show()
    
    误差柱状图

    带误差棒的堆积柱状图

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    mpl.rcParams["font.sans-serif"]=["SimHei"]
    mpl.rcParams["axes.unicode_minus"]=False
    x = np.arange(5)
    y1 = [1200,2400,1800,2200,1600]
    y2 = [1050,2100,1300,1600,1340]
    std_err1 = [150,100,180,130,80]
    std_err2 = [120,110,170,150,120]
    bar_width = 0.6
    tick_label=["家庭","小说","心理","科技","儿童"]
    error_attri = dict(ecolor="black",elinewidth=2,capsize=0)
    
    plt.bar(x,y1,
            bar_width,
            color="#87ceeb",
            align="center",
            yerr=std_err1,
            error_kw=error_attri,
            label="地区1")
    plt.bar(x,y2,
            bar_width,
            bottom=y1,
            color="#CD5C5C",
            align="center",
            yerr=std_err2,
            error_kw=error_attri,
            label="地区2")
    
    plt.ylabel("订购数量")
    plt.xlabel("图书种类")
    plt.title("大型图书展销会的不同图书种类的采购情况")
    plt.grid(True,axis="x",ls=":",color="gray",alpha=0.2)
    plt.xticks(x,tick_label)
    plt.legend()
    plt.show()
    
    误差堆积柱状图

    3.堆积折线图
    通过绘制不同数据集的折线图而生成的。堆积折线图是按照垂直方向上彼此堆叠且又不相互覆盖的排列顺序,绘制若干条折线图而形成的组合图形。
    用函数stackplot()绘制堆积折线图

    import numpy as np
    import matplotlib.pyplot as plt
    x=np.arange(1,6,1)
    y=[0,4,3,5,6]
    y1=[1,3,4,2,7]
    y2=[3,4,1,6,5]
    labels=["BluePlanet","BrownPlanet","GreenPlanet"]
    colors=["#8da0cb","#fc8d62","#66c2a5"]
    plt.stackplot(x,y,y1,y2,labels=labels,colors=colors)
    plt.legend(loc="upper left")
    plt.show()
    
    堆积折线图

    4.间断条形图
    间断条形图是在条形图的基础上绘制而成的,主要用来可视化定性数据的相同指标在时间维度上的指标值的变化情况,实现定性数据的相同指标的变化情况的有效直观比较。
    用函数broken_bath()绘制间断条形图

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    mpl.rcParams["font.sans-serif"]=["SimHei"]
    mpl.rcParams["axes.unicode_minus"]=False
    
    plt.broken_barh([(30,100),(180,50),(260,70)],(20,8),facecolors="#1f78b4")
    plt.broken_barh([(60,90),(190,20),(230,30),(280,60)],(10,8),facecolors=("#7fc97f","#beaed4","#fdc086","#ffff99"))
    
    plt.xlim(0,360)
    plt.ylim(5,35)
    plt.xlabel("演出时间")
    
    plt.xticks(np.arange(0,361,60))
    plt.yticks([15,25],["歌剧院A","歌剧院B"])
    plt.grid(ls="-",lw=1,color="gray")
    plt.title("不同地区的歌剧院的演出时间比较")
    plt.show()
    
    间断条形图

    5.阶梯图
    阶梯图是反映数据的趋势变化或是周期规律的。经常使用在时间序列数据的可视化任务中,凸显时序数据的波动周期和规律。
    用函数step()绘制阶梯图

    import matplotlib.pyplot as plt
    import numpy as np
    x=np.linspace(1,10,10)
    y=np.sin(x)
    plt.step(x,y,color="#8dd3c7",where="pre",lw=2)
    #关键字参数where取pre左开右闭,取post左闭右开
    plt.xlim(0,11)
    plt.xticks(np.arange(1,11,1))
    plt.ylim(-1.2,1.2)
    plt.show()
    
    阶梯图

    相关文章

      网友评论

        本文标题:matplotlib绘制箱型图、误差棒图、堆积图等图形

        本文链接:https://www.haomeiwen.com/subject/ylrunqtx.html