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 中文字符串的处理实现代码
Oct 25 Python
对于Python的Django框架部署的一些建议
Apr 09 Python
在Python中使用PIL模块处理图像的教程
Apr 29 Python
Python获取系统默认字符编码的方法
Jun 04 Python
使用Python解析JSON数据的基本方法
Oct 15 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
浅谈Python中range和xrange的区别
Dec 20 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
Django继承自带user表并重写的例子
Nov 18 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
Python 数据科学 Matplotlib图库详解
Jul 07 Python
Django框架中表单的用法
Jun 10 Python
python绘制简单直方图(质量分布图)的方法
Python绘制散乱的点构成的图的方法
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 #Python
使用python绘制横竖条形图
python多次执行绘制条形图
Apr 20 #Python
Python 数据可视化工具 Pyecharts 安装及应用
You might like
php实现最简单的MVC框架实例教程
2014/09/08 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
PHP实现的XXTEA加密解密算法示例
2018/08/28 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
软件测试企业面试试卷
2016/07/13 面试题
销售会计工作职责
2013/12/02 职场文书
如何填写个人简历自我评价
2013/12/10 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
检讨书怎么写?
2019/06/21 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫