• matplotlib绘制柱状图(普通、堆叠、左右分布)


    不论是堆叠、还是左右分布,其实他们都是柱状图bar,只是根据参数的不同,有不同的显示位置,多个bar呈现在一起就看上去像是堆叠起来,或是左右分布了,因此只需要控制bar的属性就可以构造不同显示效果的图:

    • 堆叠:主要使用bottom属性

    • 左右:主要使用了x轴偏移的一个属性

    1. 堆叠图

    堆叠到一起的图,如:
    在这里插入图片描述

    import numpy as np
    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
    plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
    
    fig, ax = plt.subplots(figsize=(8, 5), dpi=100)
    labels = ["数据1", "数据2", "数据3"]
    left_bottom_data = [1, 2, 3]
    left_top_data = [2, 4, 6]
    width = 0.3  # 设置条形图一个长条的宽度
    ax.bar(np.arange(len(left_bottom_data)), left_bottom_data, width=width, tick_label=labels, label="下方数据")
    ax.bar(np.arange(len(left_top_data)), left_top_data, bottom=left_bottom_data, width=width, tick_label=labels,
           label="上方数据")
    ax.legend()
    fig.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2. 左右图 示例代码

    在这里插入图片描述

    import numpy as np
    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
    plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
    
    fig, ax = plt.subplots(figsize=(8, 5), dpi=100)
    
    labels = ["数据1", "数据2", "数据3"]
    left_bottom_data = [1, 2, 3]
    width = 0.3  # 设置条形图一个长条的宽度
    ax.bar(np.arange(len(left_bottom_data)), left_bottom_data, width=width, tick_label=labels, label="左侧数据")
    right_data = [4, 7, 10]
    ax.bar(np.arange(len(right_data)) + width, right_data, width=width, tick_label=labels, label="右侧数据")
    ax.legend()
    fig.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3. 堆叠+左右 示例代码

    import numpy as np
    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
    plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
    
    fig, ax = plt.subplots(figsize=(8, 5), dpi=100)
    
    labels = ["数据1", "数据2", "数据3"]
    left_bottom_data = [1, 2, 3]
    left_top_data = [2, 4, 6]
    width = 0.3  # 设置条形图一个长条的宽度
    
    ax.bar(np.arange(len(left_bottom_data)), left_bottom_data, width=width, tick_label=labels, label="左下数据")
    ax.bar(np.arange(len(left_top_data)), left_top_data, bottom=left_bottom_data, width=width, tick_label=labels,
           label="左上数据")
    right_data = [4, 7, 10]
    ax.bar(np.arange(len(right_data)) + width, right_data, width=width, tick_label=labels, label="右侧数据")
    ax.legend()
    fig.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    图像如下所示:
    在这里插入图片描述

  • 相关阅读:
    51单片机温度控制调速风扇仿真设计
    【Spring】Spring MVC
    2016款奔驰C200车COMAND显示屏黑屏
    太绝了!这份Python爬虫入门『最强教程』当之无愧
    中电资讯-助力大学生就业中电金信登陆“职”为你来公益带岗直播
    读取windows日志
    云e办(后端)——导入导出员工数据(EasyPoi注解使用)
    [如何编译openGauss对应版本的wal2json.so]
    原生nodejs-搭建后端服务器,完成数据库的链接,客户端的访问,数据库表的操作,包含表单验证,Ajax通信
    一文搞懂ThreadLocal内存泄漏问题
  • 原文地址:https://blog.csdn.net/weixin_35757704/article/details/127569727