美文网首页
python画图----Matplotlib柱状图、频数直方图、

python画图----Matplotlib柱状图、频数直方图、

作者: 木火_magic | 来源:发表于2024-01-23 16:22 被阅读0次

    0、认识直方图

    直方图:又被称作“频率图\频数图”,展示为柱状图(或条形图),将所收集数据、特性质或结果值,用一定的范围在坐标横轴上加以区分几个相等的区间,将各区间内的测定值所出现的次数累积起来的面积,用柱形图表示出来。用以了解产品在规格标准下的分布形态、工序中心值及差异的大小等情形

    分析直方图: 可以观察条形或曲线的形状,可以观察数据在各个条形内的取值的数目。如果在条形图上再加一条顾客需求曲线,很快就可得知所做的满足顾客或不满足顾客需求的程度。

    直方图功用

    • 1.评估和检查"产品"的排布情况;
    • 2.指出采取措施的必要;
    • 3.通过对比前后两个直方图曲线,检查执行纠正措施是否有效;
    • 4.比较设备、物料、人员及供货商的重要程度,(需要合适的参考指标);

    做图前数据准备

    1.手集数据x,一般在50以上,并记录总数N
    2.将数据分组,指定组数(bins)
    3.找出最大值s_max,最小值s_min,计算出全距(R)
    4.定出距组(H):全距R/组数
    5.定出组界
    6.决定组的中心点
    7.绘图,观察效果是否符合预期
    8.调整参数,

    直方图形态图

    图片来源与网络,若侵权请联系删除
    正常状态下直方图分析中心偏左的直方图

    直方图偏向规格的下限,并伸展至规格下限左侧,表示已产生部分超出规格下限要求的不良品。


    中心偏右的直方图

    直方图偏向规格的上限,并伸展至规格上限右侧。表示已产生部分超出规格下限的要求的不良品。

    1、plt.bar绘制柱状图参数详解

    bar(x, height, width=0.8, bottom=None, ***, align='center', data=None, **kwargs)
    

    x: 表示x坐标,数据类型为int或float类型,
    height: 表示柱状图的高度,也就是y坐标值,数据类型为int或float类型,
    width: 表示柱状图的宽度,取值在0~1之间,默认为0.8
    bottom: 柱状图的起始位置,也就是y轴的起始坐标,
    align: 柱状图的中心位置,"center","lege"边缘
    color: 柱状图颜色
    edgecolor: 边框颜色
    linewidth: 边框宽度
    tick_label: 下标标签
    log: 柱状图轴使用科学计算方法,bool类型
    orientation: 柱状图是竖直还是水平,竖直:"vertical",水平条:"horizontal"

    atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)
    left: 每一个柱形左侧的X坐标
    height:每一个柱形的高度
    width: 柱形之间的宽度
    bottom: 柱形的Y坐标
    color: 柱形的颜色
    
    import numpy as np
    import matplotlib.pyplot as plt
    # x轴坐标为自动生成的1,2,3,4,当然也可以是一个数组
    x = np.arange(4)
    # 数据,三组对比数据
    Bj = [52, 55, 63, 53]
    Sh = [44, 66, 55, 41]
    js = [32, 25, 85, 63]
    #条形宽度为0.3
    bar_width = 0.3
    # 绘图 x 表示 从哪里开始
    plt.bar(x, Bj, bar_width)
    plt.bar(x+bar_width, Sh, bar_width, align="center")
    plt.bar(x+bar_width+bar_width, js, bar_width, align="center")   
    # plt.bar(x, Sh, bar_width, bottom=Bj)
    # plt.bar(x, Bj, bar_width, label="城市指标", tick_label=str1)
    # 添加数据标签
    #for a, b in zip(x, Bj):
        #plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=10)
            #plt.text(a, b+0.5, '%0.f' % b, ha='center', va='bottom', fontsize=10,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.5))
    # 添加图例
    #plt.legend()
    # 展示图片
    plt.show()
    
    三组数据横向排列
    plt.bar(x, Sh, bar_width, bottom=Bj)
    
    两组数据上下排列
    plt.bar(x, Bj, bar_width, label="城市指标", tick_label=str1)
    # 添加数据标签
    for a, b in zip(x, Bj):
        plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=10)
    
    显示横坐标标签
    # 添加图例
    #plt.legend()
    
    显示图例
    plt.text(a, b+0.5, '%0.f' % b, ha='center', va='bottom', fontsize=10,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.5))
    
    设置数值的边框大小粗细、背景色、字体大小、位置、透明度
    
    
    带箭头显示特殊标注

    2、plt.hist() 绘制频数分布图

    matplotlib.pyplot.hist( 
    x, bins=10, range=None, normed=False,  
    weights=None, cumulative=False, bottom=None,  
    histtype=u'bar', align=u'mid', orientation=u'vertical',  
    rwidth=None, log=False, color=None, label=None, stacked=False,  
    hold=None, **kwargs) 
    

    关于plt.hist()参数的使用详解

    • x : (n,) array or sequence of (n,) arrays
      指定每个bin(箱子)分配的数据,对应x轴
    • range: tuple, 显示的区间,range在没有给出bins时生效
    • bins : integer or array_like, optional
      指定bin(箱子)的个数,也就是总共有几条条状图
    • density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
    • histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
    • align: 可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
    • log: bool,默认False,即y坐标轴是否选择指数刻度
    • stacked: bool,默认为False,是否为堆积状图
    • color : color or array_like of colors or None, optional
      这个指定条状图的颜色red green blue black pink gray orange purple
    • hist中的alpha参数是控制填充颜色的深度,可以把alpha设置成0.99和0.01,看看画出来的效果就知道了
    #导入测试数据(鸢尾花数据)
    from sklearn.datasets import load_iris 
    #导入matplotlib.pyplot
    import matplotlib.pyplot as plt 
    #下载鸢尾花数据
    iris = load_iris() 
    #截取部分数据
    s = iris.data[iris.target == 1, 3]
    '''
    print(s)
    [1.4 1.5 1.5 1.3 1.5 1.3 1.6 1.  1.3 1.4 1.  1.5 1.  1.4 1.3 1.4 1.5 1.
     1.5 1.1 1.8 1.3 1.5 1.2 1.3 1.4 1.4 1.7 1.5 1.  1.1 1.  1.2 1.6 1.5 1.6
     1.5 1.3 1.3 1.3 1.2 1.4 1.2 1.  1.3 1.2 1.3 1.3 1.1 1.3]
    '''
    #新建直方图,不指定参数,参数为默认,输出频数直方图
    plt.hist(s)
    '''
    如果在使用plt.hist(normed=True) 的时候报错:
    【AttributeError:'Rectangle' object has no property 'normed'】
    是因为normed已经被删除了,替换的是density效果是一样的:
    density=True
    '''
    #设置参数density
    plt.hist(s,density=True,alpha=0.5)
    plt.hist(s,density=True,alpha=0.99)
    #显示图表
    plt.show()
    
    import matplotlib.pyplot as plt 
    plt.plot(x,y,'ro',label="point") 
    plt.legend() 
    plt.show()
    

    相关文章

      网友评论

          本文标题:python画图----Matplotlib柱状图、频数直方图、

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