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 相关文章推荐
Python3实现连接SQLite数据库的方法
Aug 23 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
python从入门到精通(DAY 1)
Dec 20 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
Python实现ping指定IP的示例
Jun 04 Python
解决python "No module named pip" 的问题
Oct 13 Python
python实现五子棋小程序
Jun 18 Python
django的model操作汇整详解
Jul 26 Python
基于python中__add__函数的用法
Nov 25 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
python学习将数据写入文件并保存方法
Jun 07 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 Python
python绘制简单直方图(质量分布图)的方法
Python绘制散乱的点构成的图的方法
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 #Python
使用python绘制横竖条形图
python多次执行绘制条形图
Apr 20 #Python
Python 数据可视化工具 Pyecharts 安装及应用
You might like
PHP 透明水印生成代码
2012/08/27 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
示例vue 的keep-alive缓存功能的实现
2018/12/13 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
原生JS实现天气预报
2020/06/16 Javascript
Linux下编译安装MySQL-Python教程
2015/02/02 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
python简单区块链模拟详解
2019/07/03 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
会计自我鉴定范文
2013/10/06 职场文书
开学寄语大全
2014/04/08 职场文书
离职报告范文
2014/11/04 职场文书
外贸英文求职信范文
2015/03/19 职场文书
2015年母亲节寄语
2015/03/23 职场文书
大学生读书笔记范文
2015/07/01 职场文书
工作简报范文
2015/07/21 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
Apache POI的基本使用详解
2021/11/07 Servers