hs-octoplot: Easy and simple plotting library.

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.


Very simple use: just call the plot or scatter family of functions. All rendering is done by the Gloss library (see the gloss package).

Also, this library includes support for animated simulations.

[Skip to ReadMe]


Change logNone available
Dependenciesbase (==4.8.*), containers (==0.5.*), gloss (==1.11.*), gloss-raster (==1.11.*) [details]
Copyright(c) 2017 Alejandro Linarez
AuthorAlejandro Linarez Rangel
Home pagehttps://hs-octoplot.sourceforge.io/
Source repositorythis: git clone git@github.com/alinarezrangel/hs-octoplot.git(tag 1.0)
head: git clone git@github.com/alinarezrangel/hs-octoplot.git
UploadedSat Oct 14 05:01:08 UTC 2017 by alinarezrangel



Maintainers' corner

For package maintainers and hackage trustees

Readme for hs-octoplot-

[back to package description]

OctoPlot Haskell Library

Plotting with Haskell! this library was designed to make plotting easy and fast.


OctoPlot is a plotting library designed to be easy to used and fast to implement. Originally designed for the hs-automata package (the Automata library for Haskell), this library includes support for plotting, scattering and simulations by using just one function (per-task)!

The interface of this library was based on the MATLAB / GNU-Octave plotting functions. By using the gloss package (the Gloss library) this library can easily plot and scatter functions.


Plotting the sin function

import Graphics.Rendering.OctoPlot

-- defined only for convenience with following examples:
mySignal :: Float -> Float
mySignal = sin

x = linspace (-2 * pi) 200.0 (2 * pi)
y = mySignal <$> x

main = plot x y mkDefaultOption

Changing the legend

import Graphics.Rendering.OctoPlot

-- defined only for convenience with following examples:
mySignal :: Float -> Float
mySignal = sin

x = linspace (-2 * pi) 200.0 (2 * pi)
y = mySignal <$> x

myOptions = mkDefaultOption { legendOption = "The sin function" }

main = plot x y myOptions


import Graphics.Rendering.OctoPlot

x :: Linspace Float
x = linspace (-2 * pi) 20.0 (2 * pi)
y :: Linspace Float
y = (\x -> abs (sin x) * x) <$> x

opts :: Option
opts = mkDefaultOption { legendOption = "Scattering example" }

main = scatter x y opts


import Graphics.Rendering.OctoPlot

data Model = Model { counter :: !Int }

transitionF :: Model -> Model
transitionF m = Model { counter = counter m + 1 }

displayF :: Model -> Picture
displayF Model { counter = c } = Text $ show c

main = simulate 1
                Model { counter = 1 }



This library is cabal-ized, so you can just use:

cabal configure
cabal build
cabal install

This library also has support for Haddock:

cabal haddock --html

Also, this library is on Hackage as hs-octoplot:

cabal update
cabal install hs-octoplot


You can see the full documentation on Hackage or the basic tutorial on the docs/ folder.


The Chart package provides a full-featured support for complex plotting (like histograms, vector-plotting and more).

The easyplot package provides a GNUPlot backend and similar functions.

The matplotlib is a full-featured plotting library based on the Python's matplotlib module.

None of them provides some of the functions heavily used by the main user of this library: hs-automata.