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 相关文章推荐
python字典多条件排序方法实例
Jun 30 Python
python统计文本文件内单词数量的方法
May 30 Python
python脚本替换指定行实现步骤
Jul 11 Python
python 自动去除空行的实例
Jul 24 Python
Python之列表实现栈的工作功能
Jan 28 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
Python数据可视化实现多种图例代码详解
Jul 14 Python
selenium自动化测试入门实战
Dec 21 Python
python办公自动化之excel的操作
May 23 Python
用Python selenium实现淘宝抢单机器人
Jun 18 Python
python绘制简单直方图(质量分布图)的方法
Python绘制散乱的点构成的图的方法
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 #Python
使用python绘制横竖条形图
python多次执行绘制条形图
Apr 20 #Python
Python 数据可视化工具 Pyecharts 安装及应用
You might like
discuz安全提问算法
2007/06/06 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
flexigrid 参数说明
2010/11/23 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
node.js的事件机制
2017/02/08 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
Python实现的数据结构与算法之队列详解
2015/04/22 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
小孩百日宴答谢词
2014/01/15 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
建筑横幅标语
2014/10/09 职场文书
期末复习计划
2015/01/19 职场文书
毕业生对母校寄语
2015/02/26 职场文书
个人向公司借款协议书
2016/03/19 职场文书
新手入门Mysql--概念
2021/06/18 MySQL
Nginx实现会话保持的两种方式
2022/03/18 Servers