• 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

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

  • 相关阅读:
    Mac安装office 2019
    CVPR2022:使用完全交叉Transformer的小样本目标检测
    CSS 3 五光十色的变色龙动画的制作
    Rust 所有权、引用与借用
    RTL乒乓运算模块设计 - Submodul Design
    线性DP算法的实现
    86.Linux系统下复制进程fork(逻辑地址和物理地址)
    推荐20套适合python下django框架的毕业设计毕设课题
    ESP8266_接入百度物联网核心套件、使用MQTT协议通信
    Android面试官:入职大厂的Android程序员具备怎样的专业素养?
  • 原文地址:https://blog.csdn.net/weixin_35757704/article/details/127569727