Python matplotlib绘制条形统计图 处理多个实验多组观测值


Posted in Python onApril 21, 2022

效果图展示如下:

Python matplotlib绘制条形统计图 处理多个实验多组观测值

该代码可以处理多个实验多组观测值的展示,代码如下:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import MultipleLocator

def plot_bar(experiment_name, bar_name, bar_value, error_value=None,):
    """

    Args:
        experiment_name: x_labels
        bar_name: legend name
        bar_value: list(len(experiment_name), each element contains a np.array(),
                   which contains bar value in each group
        error_value: list(len(experiment_name), each element contains a np.array(),
                   which contains error value in each group
    Returns:

    """

    # 用于正常显示中文标签
    # plt.rcParams["font.sans-serif"]=['SimHei']

    colors = ['lightsteelblue', 'cornflowerblue', 'royalblue', 'blue', 'mediumblue', 'darkblue', 'navy', 'midnightblue',
              'lavender', ]

    assert len(bar_value[0]) <= len(colors)  # if not try to add color to 'colors'

    plt.rcParams['axes.unicode_minus'] = False
    plt.style.use('seaborn')
    font = {'weight': 'normal', 'size': 20, }
    font_title = {'weight': 'normal', 'size': 28, }
    # bar width
    width = 0.2
    # groups of data
    x_bar = np.arange(len(experiment_name))
    # create figure
    plt.figure(figsize=(10, 9))

    ax = plt.subplot(111)  # 假如设置为221,则表示创建两行两列也就是4个子画板,ax为第一个子画板

    # plot bar

    bar_groups = []
    value = []
    for i in range(len(bar_value[0])):
        for j in range(len(experiment_name)):
            value.append(bar_value[j][i])
        group = ax.bar(x_bar - (len(experiment_name)-3-i)*width, copy.deepcopy(value), width=width, color=colors[i], label=bar_name[i])
        bar_groups.append(group)
        value.clear()


    # add height to each bar
    i = j = 0
    for bars in bar_groups:
        j = 0
        for rect in bars:
            x = rect.get_x()
            height = rect.get_height()
            # ax.text(x + 0.1, 1.02 * height, str(height), fontdict=font)
            # error bar
            if error_value:
                ax.errorbar(x + width / 2, height, yerr=error_value[j][i], fmt="-", ecolor="black",
                            elinewidth=1.2, capsize=2,
                            capthick=1.2)
            j += 1
        i += 1

    # 设置刻度字体大小
    plt.xticks(fontsize=15)
    plt.yticks(fontsize=18)
    # 设置x轴的刻度
    ax.set_xticks(x_bar)
    ax.set_xticklabels(experiment_name, fontdict=font)

    # 设置y轴的刻标注
    ax.set_ylabel("Episode Cost", fontdict=font_title)
    ax.set_xlabel('Experiment', fontdict=font_title)

    # 是否显示网格
    ax.grid(False)

    # 拉伸y轴
    ax.set_ylim(0, 7.5)
    # 把轴的刻度间隔设置为1,并存在变量里
    y_major_locator = MultipleLocator(2.5)
    ax.yaxis.set_major_locator(y_major_locator)

    # 设置标题
    plt.suptitle("Cost Comparison", fontsize=30, horizontalalignment='center')

    plt.subplots_adjust(left=0.11, bottom=0.1, right=0.95, top=0.93, wspace=0.1, hspace=0.2)
    # 设置边框线宽为2.0
    ax.spines['bottom'].set_linewidth('2.0')
    # 添加图例
    ax.legend(loc='upper left', frameon=True, fontsize=19.5)
    # plt.savefig("test.png")
    plt.show()
    plt.legend()

if __name__ == "__main__":
    test_experiment_name = ["Test 1", "Test 2", "Test 3", "Test 4"]
    test_bar_name = ['A', "B", "C"]
    test_bar_value = [
        np.array([1, 2, 3]),
        np.array([4, 5, 6]),
        np.array([3, 2, 4]),
        np.array([5, 2, 2])
    ]
    test_error_value = [
        np.array([1, 1, 2]),
        np.array([0.2, 0.6, 1]),
        np.array([0, 0, 0]),
        np.array([0.5, 0.2, 0.2])
    ]
    plot_bar(test_experiment_name, test_bar_name, test_bar_value, test_error_value)

以上就是本文的全部内容,希望对大家的学习有所帮助。


Tags in this post...

Python 相关文章推荐
使用tensorflow实现线性回归
Sep 08 Python
对python文件读写的缓冲行为详解
Feb 13 Python
Python函数装饰器常见使用方法实例详解
Mar 30 Python
Python求解正态分布置信区间教程
Nov 20 Python
Python autoescape标签用法解析
Jan 17 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
如何通过python实现IOU计算代码实例
Nov 02 Python
Python+unittest+requests+excel实现接口自动化测试框架
Dec 23 Python
python实现简易名片管理系统
Apr 11 Python
利用Python判断你的密码难度等级
Jun 02 Python
golang特有程序结构入门教程
Jun 02 Python
python绘制简单直方图(质量分布图)的方法
Python绘制散乱的点构成的图的方法
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 #Python
使用python绘制横竖条形图
python多次执行绘制条形图
Apr 20 #Python
Python 数据可视化工具 Pyecharts 安装及应用
You might like
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
PHP服务器页面间跳转实现方法
2012/08/02 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
Python CSV模块使用实例
2015/04/09 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
医院护士专业个人的求职信
2013/12/09 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python