/exp-figure-tools

A script tool for generating figures from experiment results, based on matplotlib

Primary LanguagePythonMIT LicenseMIT

ExpFigureTool是快速将实验结果批量生成实验图(折线图,柱状图)的工具

基于Python和matplotlib

环境要求

  • Python 2 or 3 (python 3支持测试中)
  • matplotlib >= 2.0
  • future库 (pip install future)
  • Latex环境
  • Windows下建议使用wsl

使用教程

  • 在有了实验数据文件之后,需要编写一个json文件,用来表示如何从实验数据生成实验图,参考demo/list.json,具体说明见下

  • 执行python run.py list.json即可根据list.json绘图,

  • list.json文件中包含一个json数组,这个数组有若干个FigItem组成,每一个FigItem表示由一个数据文件绘制一张实验图

    [
        {
            // FigItem
        },
        {
            // Another FigItem
        }
        // ...
    ]
  • 每一个FigItem包含以下信息

    {
        "file": "", // 数据文件名
        // 以下信息非必须,有默认值
        "output": "", // 输出文件名,默认为输入文件名后缀换为pdf
        "style": 1, // 预设的格式,可选1~5,默认为1,分别对应style文件夹中
        "chart.type": "", // 输出图表类型,可选"line"(折线图)或"bar"(柱状图),默认为折线图
        "separator": "," // 数据分割字符,默认为空白字符(空格、制表符)
    }
  • FigItem根据数据文件的不同可以分为两类

    • 简单表格(参考demo/a.dat,demo/b.dat)

      • 第一行为标题信息

      • 第一列为对应的x值,第一列第一个元素用于显示x label

      • 其余列为不同组下的y值,每列第一个元素用于显示图例

      • FigItem中需包含

        {
            "y_label": "", // 纵轴label
        }
    • 数据透视表(参考demo/pivot.dat)

      • 很多情况下实验结果文件以数据透视表(pivot table)的形式呈现,即每一行代表一个项目(实验结果),不同的列代表不同的域,如:

        Name Gender Age Cource Score
        Zhang San Male 18 Math 100
        Li Si Male 19 Math 98
        Xiao Hong Female 20 English 95
      • ExpFigureTool可以直接根据该格式类型的文件生成实验图

      • 对应的FigItem中需要包含以下项目

        {
            "file": "", // 数据文件名,同简单表格
            "pivotTable": true, // 表示数据格式为数据透视表
            "pivotTable.category": "Gender", // 表示category的列
            "pivotTable.independentVariable": "Age", // 自变量(x轴)的列
            "pivotTable.value": "Score", // 因变量(y轴)的列
            
            "pivotTable.point": "mean", // 对于每一个点的取值方式,可选mean和median
            "pivotTable.errorBar": "std" // error bar类型,可选min-max,std,percentile
        }
    • FigItem中的其他常用设置项

      {
          "xlabel": "Age", // 将覆盖默认显示的x label
          "ylabel": "Score", // 将覆盖默认显示的y label
          "xtick.lim": [0, 0.8], // x轴显示范围
          "xtick.nbins": 3, // x轴最多显示3个label
          "xtick.interval": 0.2, // x轴刻度间隔,不可与nbins同用
          "xticks": [3, 4, 5], // 指定x轴上显示哪些label,适用于数值类型的x轴,覆盖上面除lim外的所有设置,可与对数坐标轴同用
          "ytick.lim": [0, 0.8], // y轴,同上
          "ytick.interval": 0.2,
          "ytick.nbins": 5,
          "yticks": [1, 2, 3],
          "marker": false, // 折线图中是否显示数据点,默认为true
      }

其他功能

  • 所有文本支持latex语法,如$\alpha$
  • json文件中支持//开头作为注释
  • demo/complex.json中包含了更多高级功能的使用方法,可作为参考

待完善功能

  • 错误提示