zoukankan      html  css  js  c++  java
  • matplotlib学习记录 七

    # 绘制直方图
    
    # 假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到
    # 120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据?
    
    from matplotlib import pyplot as plt
    
    a = [131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,
         127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,
         132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,
         123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,
         107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,
         138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,
         136,118,139,123,112,118,125,109,119,133,112,114,122,109,106,123,116,131,127,115,
         118,112,135,115,146,137,116,103,144,83,123,111,110,111,100,154,136,100,118,119,
         133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,
         125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,
         105,98,117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,
         110,105,129,137,112,120,113,133,112,83,94,146,133,101,131,116,111,84,137,115,
         122,106,144,109,123,116,111,111,133,150]
    
    # 计算组数  组数=极差/组距
    d = 3 # 组距
    num_bins = (max(a)-min(a))//d  # 双斜线是商向下取整,也可以用int强行取整
    
    # 绘制直方图,传入数据列表和组数
    # 这是频数直方图
    plt.hist(a,num_bins)
    # 这是频率直方图
    # plt.hist(a,num_bins,normed=True)
    
    # 自定义x轴
    plt.xticks(range(min(a),max(a)+d,d))
    
    
    
    # 显示辅助线,设置透明度
    plt.grid(alpha=0.5)
    
    # plt.savefig("8.png")
    
    plt.show()
    # 在美国2004年人口普查发现有124milion的人在离家相对较远的地方工作。
    # 根据他们从家到上班地点所需要的时间,通过抽样统计(最后一列)出了下表的数据,
    # 这些数据能够绘制成直方图么?
    
    # 需要注意的是一下数据已经经过统计了,所以绘制不了直方图,直方图只能绘制没有经过处理的原始数据
    # 但是我们可以用绘制条形图的方法把图展示成直方图
    
    
    from matplotlib import pyplot as plt
    
    interval = [0,5,10,15,20,25,30,35,40,45,60,90] # 距离
    width = [5,5,5,5,5,5,5,5,5,15,30,60] # 组距,可看出是变化的
    quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47] # 人数
    
    
    # 绘制条形图,为了取消各条之间的空隙,设定宽度为1就行
    plt.bar(range(len(quantity)),quantity,width=1)
    
    
    # 设置X轴刻度
    # 因为条形图的刻度默认在各数据条的中间,又因为我们设定了数据条宽度为1,所以需要把刻度向左偏移0.5
    # 如果是这样的话,最后一个刻度条的末尾没有数据
    # x = [i-0.5 for i in range(len(quantity))]
    # 进行修改,实际上是增加了一个刻度,但是这个刻度没有数据
    x = [i-0.5 for i in range(len(quantity)+1)]
    # 增加最后一个刻度的真实刻度值,150的来源是现有的真实刻度是90,然后它的宽度为60,所以加起来为150
    x_ticks = interval+[150]
    # 两个刻度一一对应起来
    plt.xticks(x,x_ticks)
    
    
    
    plt.grid(alpha=0.5)
    
    plt.show()
  • 相关阅读:
    MySQL binlog 组提交与 XA(分布式事务、两阶段提交)【转】
    一致性哈希算法原理
    【MySQL (六) | 详细分析MySQL事务日志redo log】
    Replication基础(六) 复制中的三个线程(IO/SQL/Dump)
    硬盘基本知识(磁头、磁道、扇区、柱面
    MySQL架构总览->查询执行流程->SQL解析顺序
    Redis之AOF重写及其实现原理
    MySQL binlog中的事件类型
    linux(mac) 编译安装MySQL
    写给自己看的Linux运维基础(四)
  • 原文地址:https://www.cnblogs.com/shawone/p/10301498.html
Copyright © 2011-2022 走看看