• python可视化-条形图(柱状图)与直方图


    一、条形图

    条形图(bar chart),也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的变量数值呈一定比例。。

    1.1 竖型条形图

    画条形图要用到 pyplot 中的 bar 函数,该函数的基本语法为:

    bar(x,height,width,**kwargs)
    #height:个数或者一个数组,表示条形高度
    #width:可选参数,一个数或一个数组,条形宽度,默认0.8
    #**kwargs:不定长的关键字参数,用字典形式设置条形图的其他属性,包括图形标签 label,颜色标签 color,不透明度 alpha 等
    
    • 1
    • 2
    • 3
    • 4

    假设对以下表进行条形图展示,

    饮料boygirl
    六个核弹69
    忘崽年奶74
    王老菊64
    茶兀26
    雷碧15

    画出boy买各类饮料数量的竖条形图,代码如下:

    # 设置中文显示
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
     
    waters = ('六个核弹', '忘崽年奶', '王老菊', '茶兀', '雷碧')
    boy_buy_number = [6, 7, 6, 2, 1]
     
    plt.bar(waters, boy_buy_number)
    plt.title('boy买各类饮料数量')
    plt.
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    输出图如下:
    在这里插入图片描述

    1.2 横型条形图

    画出boy买各类饮料数量的竖条形图,代码如下:

    
    import matplotlib.pyplot as plt
     
    # 设置中文显示
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
     
    waters = ('六个核弹', '忘崽年奶', '王老菊', '茶兀', '雷碧')
    boy_buy_number = [6, 7, 6, 2, 1]
     
    plt.barh(waters, boy_buy_number)
    plt.title('boy买各类饮料数量')
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    输出图如下:
    在这里插入图片描述

    1.3 并列条形图

    画出boy和girl买各类饮料数量的竖条形图,代码如下:

    import matplotlib.pyplot as plt
    import numpy as np
     
    # 设置中文显示
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
     
    # 输入统计数据
    waters = ('六个核弹', '忘崽年奶', '王老菊', '茶兀', '雷碧')
    boy_buy_number = [6, 7, 6, 1, 2]
    girl_buy_number = [9, 4, 4, 5, 6]
     
    bar_width = 0.3 # 条形宽度
    index_male = np.arange(len(waters)) # 男生条形图的横坐标
    index_female = index_male + bar_width # 女生条形图的横坐标
     
    # 使用两次 bar 函数画出两组条形图
    plt.bar(index_male, height=boy_buy_number, width=bar_width, color='g', label='男性')
    plt.bar(index_female, height=girl_buy_number, width=bar_width, color='r', label='女性')
     
    plt.legend() # 显示图例
    plt.xticks(index_male + bar_width/2, waters) # 让横坐标轴刻度显示 waters 里的饮用水, index_male + bar_width/2 为横坐标轴刻度的位置
    plt.ylabel('购买量') # 纵坐标轴标题
    plt.title('男、女购买饮料情况') # 图形标题
     
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    输出图如下:

    在这里插入图片描述

    二、条形图

    2.1 直方图与条形图区别

    1. 条形图:用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的;
    2. 直方图:用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。
    3. 分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。
    4. 条形图主要用于展示分类数据,而直方图则主要用于展示数据型数据。

    2.2 直方图示例

    展示不同观影时长的区间统计直方图

    import pandas as pd
    import matplotlib.pyplot  as plt
    import pylab as pl
    # 展现不同电影的时长分布状态
    plt.figure(figsize=(20, 8), dpi=100)
    # 准备时长数据
    time =[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]
    # 定义一个间隔大小
    a = 5
    # # 得出组数
    bins = int((max(time) - min(time)) / a)
    # 画出直方图
    plt.hist(time, bins=100)
    # 指定刻度的范围,以及步长
    plt.xticks(list(range(min(time), max(time)))[::2])
    plt.xlabel("电影时长大小")
    plt.ylabel("电影的数据量")
    plt.grid(True, linestyle='--', alpha=0.5)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    输出图如下:
    在这里插入图片描述

  • 相关阅读:
    servlet 教程 2:返回 jsp 页面
    聚观早报|蚂蚁集团发布“蚁天鉴”;vivo X100系列即将亮相
    新库上线 | CnOpenData中国观鸟记录数据
    TCP | 你真的懂 HTTP 吗?
    面试常问框架知识(动手做才能深刻)
    Ubuntu下发送邮件
    P1941 [NOIP2014 提高组] 飞扬的小鸟
    二叉树的建立和前序,中序,后序,遍历(给定节点以及其之间的关系)
    Node实现数据加密
    深拷贝与浅拷贝
  • 原文地址:https://blog.csdn.net/weixin_42819452/article/details/126164819