C-Data Parametric Analysis/Visualization Suite
3 Stars
Updated Last
5 Months Ago
Started In
November 2015

๐ŸŽจ Galleries (Sample Output) ๐ŸŽจ

๐Ÿ“ก SignalProcessing.jl, ๐Ÿ“ˆ InspectDR.jl (might be out of date).

CData.jl: (C-Data) Analysis/Visualization Suite

"Focus on the analysis itself, not data manipulation"


CData.jl (C-Data) provides a collection of tools to simplify the analysis of large multi-dimensional datasets & better visualize (see) mathematical relationships buried within.

In other words, the goal is to provide analysis tools that lead to minimal code, written in a natural, and readable fashion. In particular, the tools will help perform the following operations:

  1. Read in complex multi-dimensional input data.
  2. Perform the same operation on all elements (usually) without having to write explicit loops.
  3. Quickly organize and plot the results in a way that sheds light on the studied phenomenon.
  4. Save data and plot configuration to a single .hdf5 file.
  5. Reload plot data for further investigation at a later time.
  6. Render plots using different plotting backends (possibly at a later date).

The C-Data toolkit was initially designed to assist with circuit-data (C-Data) analysis. That being said, C-Data provides a generic toolkit that can also be applied to other scientific fields.

The C-Data toolkit is implemented in the Julia Programming Language.

Supported Plotting Backends

NOTE: The term "load time" is used loosely below to indicate time to first plot.

  • InspectDR.jl: One of the fastest solutions with the shortest load times. InspectDR also provides good interactivity, but is relatively new/untested, and has fewer features than other backends (ex: Matplotlib).
  • Grace/xmgrace: Short load times and fast when dealing with small datasets. The GUI feels a bit dated and unfamiliar, but one can readily fine tune almost any visual element to generate publication-quality plots.
  • Matplotlib/PyPlot.jl: Longer load times (loading anaconda). Faster than Grace/xmgrace solution when dealing with moderately-sized datasets (~200k points).
  • Qwt/guiqwt: Longer load times (loading anaconda). Faster than Matplotlib/PyPlot.jl solution when dealing with moderately-sized datasets (~200k points).
    • guiqwt appears slow when plotting a large number of traces (ex: eye diagram of a long transient dataset split into many individual traces).
  • Plots.jl/(*.jl): Uniform plotting interface supporting multiple backends. In particular, there are signs that GR.jl will potentially be one of the fastest.
    • The GR.jl backend is not yet mature: Does not support subplots, cannot display multiple plot windows, ...


  1. Install Julia

    • Optional/Workaround: At the time of writing, module HDF5.jl does not appear to install the base HDF5 libraries required by CData. On Ubuntu systems, the HDF5 package is installed with the following:

        $ sudo apt-get update
        $ sudo apt-get install libhdf5
        #TODO: Verify package name.
  2. Optional: Install Anaconda distribution of Python 2.7

    • Anaconda is required if one is to render plots with Matplotlib/PyPlot.jl or Qwt/guiqwt.
  3. Install C-Data Julia modules (Prompts to install python/PyCall-based modules).

     julia> pkg"add"
     julia> using CData
     julia> CData.install()
  4. Optional backend: Install Grace

    • The installation of Grace is probably the simplest amongst of all backends (excluding InspectDR).
    • That being said, issues were found where GracePlot/Grace interactions cause certain Ubuntu installations to logout the user. After further reading, the author believes this might have something to do with the X-server. The issue could only be circumvented by running C-Data from a VMWare session running yet another Ubuntu installation.
  5. Optional backend: Install PyPlot

  6. Optional backend: Install guiqwt

Sample Usage

๐ŸŽจ Galleries: ๐Ÿ“ก SignalProcessing.jl, ๐Ÿ“ˆ InspectDR.jl (might be out of date).

Examples demonstrating the capabilities of the C-Data toolkit are provided by the following modules:

  1. SignalProcessing.jl: sample code.

     julia> using SignalProcessing; include(joinpath(dirname(pathof(SignalProcessing)), "../sample/runsamples.jl"))
  2. NetwAnalysis.jl: sample code.

     julia> using NetwAnalysis; include(joinpath(dirname(pathof(NetwAnalysis)), "../sample/runsamples.jl"))

By default, runsamples.jl will render plots using the InspectDR backend. To change the default backend, set the EASYPLOT_DEFAULTDISPLAY environment variable, as described in EasyPlot.jl.

Sample Usage: InspectDR

  1. InspectDR.jl: sample code.

     julia> using InspectDR; include(joinpath(dirname(pathof(InspectDR)), "../sample/runsamples.jl"))


Documentation is limited at the moment. See Github pages of corresponding modules for more detail.

Documentation for Principal Modules

  1. MDDatasets.jl - Multi-dimensional datasets & operations:
  2. CircuitAnalysis.jl - Basic circuit analysis tools.:
  3. SignalProcessing.jl - Step/pulse responses, Fourier transform/series, PRBS sequences, ...:
  4. NetwAnalysis.jl - S/Z/Y/H/G/ABCD parameters, ...:
  5. EasyPlot.jl - Generic plot objects with simple/succinct build interface:
  6. EasyData.jl - Simple/fast(+HDF5) {data, plot} โ‡” file:
  7. EDAData.jl - Access/manipulate data used by EDA tools:

Documentation for Secondary Modules

  1. FileIO2.jl - "File Object"-Type Hierarchy:
  2. InspectDR.jl - Efficient/interactive Julia/Gtk plots:
  3. GracePlot.jl - Publication-quality plotting for Julia using Grace/xmgrace:
  4. EasyPlotInspect.jl - Implements EasyPlot.jl rendering Interface using InspectDR.jl:
  5. EasyPlotGrace.jl - Implements EasyPlot.jl rendering interface using Grace/xmgrace:
  6. EasyPlotMPL.jl - Implements EasyPlot.jl rendering interface using Matplotlib/PyPlot/PyCall:
  7. EasyPlotQwt.jl - Implements EasyPlot.jl rendering interface using Qwt/guiqwt/PyCall:
  8. EasyPlotPlots.jl - Implements EasyPlot.jl rendering interface using Plots.jl/(*.jl):
  9. SpiceData.jl - Pure-Julia SPICE data file reader:
  10. LibPSF.jl - Pure-Julia implementation of 3rd party .psf reader:
  11. PSFWrite.jl - Pure-Julia .psf writer:

Known Limitations

The C-Data module is always tracking master branches, making it a relatively unstable platform for development. This is particularly true when changes are made to the programming interface.

Although {NumericIO, InspectDR, MDDatasets, SpiceData, LibPSF, PSFWrite} are registered modules (can be added with ] add MODULENAME), the CData installation pulls the development branch of their respective .git repositories. In theory, this ensures no modules are left with an incompatible version during the devlopment process.

Backwards Compatibility

The C-Data suite does not currently provide backwards compatibility for previous versions of Julia. To use C-Data with older Julia distributions, the user must check out older versions of each submodule:

  • Julia-0.4: Check out version from November 15 2016 (2016 11 15).
    • Tested configuration: Linux / Julia-0.4.5 (64-bit) / Anaconda 2.1.0 (64-bit w/Python 2.7.11)
  • Julia-0.5: Check out version from May 12th 2017 (2017 05 12).
    • Tested configuration: Linux / Julia-0.5.1 (64-bit) / Anaconda 2.1.0 (64-bit w/Python 2.7.11)
  • Julia-0.6: Check out version from Aug 1st 2018 (2018 08 01).
    • Tested configuration: Linux / Julia-0.6.0 (64-bit)


Extensive compatibility testing of the C-Data toolkit has not been performed. The module has been tested using the following environment(s):

  • Windows / Linux / Julia-0.7.0 (64-bit)


The C-Data toolkit is not yet mature. Expect significant changes.

This software is provided "as is", with no guarantee of correctness. Use at own risk.