• 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

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

  • 相关阅读:
    GitHub 最全的开发资源汇总系列
    ASP.NETCore统一处理404错误都有哪些方式?
    你不知道并且没听说过的js原生网页共享接口
    数据结构--哈希表(Hash Table)
    力扣:84.柱状图中最大的矩形
    03-Spring中Bean的加载控制方式
    怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
    【Linux学习笔记3】-【指定运行级别,Linux找回root密码,帮助指令(man,help),查看以.开头的隐藏文件】
    SpringMVC+Vue实现前后端的农业信息管理系统
    聚观早报 | 8月抖音吸金超3.06亿美元;​亚马逊发布新Kindle
  • 原文地址:https://blog.csdn.net/weixin_35757704/article/details/127569727