• 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

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

  • 相关阅读:
    oh-my-posh安装过程问题及注意事项
    Oracle数据库连接之TNS-03505_无法解析服务名异常
    树莓派之树莓派系统安装
    自然语音处理(NLP)系列(五)——详解智能问答系统
    阿里后端优化这么恐怖?看完这20W字Java性能实战经验手册,最少P7
    Java数据的基本(原始)类型和引用类型的特点差别
    P1095 [NOIP2007 普及组] 守望者的逃离
    A062-防火墙安全配置-配置Iptables防火墙策略
    IDEA 打包MapReduce程序到集群运行的两种方式以及XShell和Xftp过期的解决
    Linux之文件打包,压缩,解压
  • 原文地址:https://blog.csdn.net/weixin_35757704/article/details/127569727