• 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

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

  • 相关阅读:
    css:清除浮动的n种方式
    MySQL索引、事务与存储引擎
    用户画像系列——Lookalike在营销圈选扩量中的应用
    Go 语言使用 XORM 操作 MySQL 的陷阱
    如何在数据库中存储小数:FLOAT、DECIMAL还是BIGINT?
    Java项目:SSM红酒朔源管理系统
    鸿蒙HarmonyOS实战-Stage模型(服务卡片的模块和创建)
    提升办公效率,畅享多功能办公笔记软件Notion for Mac
    完美掌握MySQL登录方法]MySQL登录教程
    URP渲染管线实战教程系列 之URP渲染管线实战解密(一)
  • 原文地址:https://blog.csdn.net/weixin_35757704/article/details/127569727