MOPView

MOPView is the Multitude Of Points Viewer. It plots points (or lines or other shapes) in a hardware accelerated, interactive graph.

line graph screenshot scatter graph screenshot

The following graph styles are currently supported:

The following data sources are currently supported:

Why not use gnuplot, graph.js, calc, etc?

These tools are great for presenting data, but not so good for inspecting large datasets. MOPView lets you quickly pan and zoom into interesting sections, or zoom out to see all of the data. This is possible because MOPView uses hardware acceleration with OpenGL to render the data. As an example, my test dataset of historical stock prices takes 0.6 seconds to render a single image in gnuplot but runs at 60hz in MOPView with an RX 470 GPU. Over 2 million points can be rendered interactively with MOPView using that same RX 470.

Requirements

You need a GPU and drivers supporting OpenGL 4.1 and GLSL 4.2. About 200MB VRAM minimum is needed, maybe more for large datasets. Testing is done with go version 1.18.1.

Building

Newer Go with modules: Run make to build. MOPView is written in go and the go tools should download the dependencies automatically.

Older Go: Run GOPATH=$(pwd) go get graph to download dependencies, then GOPATH=$(pwd) go build graph to build. Rename graph executable to mopview.

For the record, I did not consent to the decision to completely change the go build system. That's on the go devs at Google.

Configuring

Configuration is done through a JSON file, which is passed as the only command line argument to the mopview executable. Example JSON:

{
  "CSVSources": [
    {
      "Filename": "stockprices/AAL.csv",
      "ColumnNames": [
        "",
        "AALOpen",
        "AALHigh",
        "AALLow",
        "AALClose",
        "AALVolume"
      ],
      "RowName": "AALIndex",
      "SkipRows": 1,
      "RowOffset": -4354
    }
  ],
  "ConstSources": [
    {
      "Name": "PointSize",
      "Value": 0.005
    },
    {
      "Name": "One",
      "Value": 1
    },
    {
      "Name": "Half",
      "Value": 0.5
    },
    {
      "Name": "Z",
      "Value": 0
    }
  ],
  "Plots": [
    {
      "Name": "AAL",
      "X": "AALIndex",
      "Y": "AALOpen",
      "CY": "AALClose",
      "MinY": "AALHigh",
      "MaxY": "AALLow",
      "R": "Half",
      "G": "Half",
      "B": "Half",
      "S": "PointSize",
      "Style": "Line",
      "RandomizeColor": 1
    }
  ]
}

Explanation: A graph consists of one or more data sources and one or more plots. A data source is a sequence of floating point values with a unique name. A plot specifies which data source(s) should be used to provide which characteristics of each point, and what style should be used to render the points.

An example dataset is included in the mopview_example directory, just run ../mopview example.json (from the mopview_example directory, since file paths are relative)

User Interface

Known issues

Releases

License

MOPView is copyrighted 2023 by Thomas VanSelus and licensed as GPLv2. See LICENSE.txt

See http://diospyros.us/mopview/mopview.html for the latest. Email mopview at the aforementioned domain with questions or bug reports.