packages feed

plot-light-examples (empty) → 0.1.0.0

raw patch · 9 files changed

+521/−0 lines, 9 filesdep +attoparsecdep +attoparsec-timedep +basesetup-changed

Dependencies added: attoparsec, attoparsec-time, base, blaze-svg, colour, plot-light, scientific, text, time

Files

+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Author name here (c) 2018++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Author name here nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,5 @@+# plot-light-examples++[![Build Status](https://travis-ci.org/ocramz/plot-light-examples.png)](https://travis-ci.org/ocramz/plot-light-examples)++TODO Description.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ app/heatmap/Main.hs view
@@ -0,0 +1,96 @@+module Main where++-- import Control.Monad (forM_)+-- import Data.Ratio++import Graphics.Rendering.Plot.Light+import Graphics.Rendering.Plot.Light.PlotTypes++import qualified Data.Attoparsec.Text as A+import qualified Data.Text as T +import qualified Data.Text.IO as T (readFile, writeFile)+import Data.Scientific (Scientific, toRealFloat)+import Text.Blaze.Svg.Renderer.String (renderSvg)+import Text.Blaze.Svg++import qualified Data.Colour.Names as C+import qualified Data.Colour as C+-- import qualified Data.Colour.Palette.BrewerSet as CP+-- import qualified Data.Colour.Palette.Harmony as CH+++fname = "data/heatmap-bw"++xPlot = 400+yPlot = 300+fnameOut = "data/heatmap-1.svg"++-- fdat :: FigureData Double+fdat = FigureData xPlot yPlot 0.1 0.8 0.1 0.9 10++palette0 = palette [C.blue, C.white, C.red] 15+++-- main :: IO ()+-- main = do+--   dat <- T.readFile fname+--   let pd = A.parseOnly (gridNum space) dat+--   case pd of Left e -> error e+--              Right d -> do+--                   let pixels = heatmap fdat palette0 d+--                       svg_t = svgHeader xPlot yPlot pixels+--                   -- putStrLn $ renderSvg svg_t+--                   T.writeFile fnameOut $ T.pack $ renderSvg svg_t +    +  +++main = do+  let +    p1 = Point (-2) (-2)+    p2 = Point 2 2+    frame = mkFrame p1 p2+    nx = 50+    ny = 50+    f x y = cos ( pi * theta ) * sin r +      where+      r = x'**2 + y'**2+      theta = atan2 y' x'+      (x', y') = (fromRational x, fromRational y)+    lps = plotFun2 f $ meshGrid frame nx ny+    vmin = minimum $ _lplabel <$> lps+    vmax = maximum $ _lplabel <$> lps       +    pixels = heatmap' fdat palette0 frame (fromIntegral nx) (fromIntegral ny) lps+    cbar = colourBar fdat palette0 10 vmin vmax 10 TopRight 100+    svg_t = svgHeader xPlot yPlot $ do+      axes fdat frame 2 C.black 10 10+      pixels+      cbar+  T.writeFile "data/heatmap-3.svg" $ T.pack $ renderSvg svg_t+  +        ++-- withMeshGrid :: (RealFrac a, Enum a) =>+--     Point a -> Point a -> a -> a -> (Frame a -> [Point a] -> t) -> t+-- withMeshGrid p1 p2 nx ny f =+--   withFrame p1 p2 $ \fr -> let+--   grid = meshGrid fr nx ny in f fr grid ++-- withFrame p1 p2 f = f frame where+--   frame = mkFrame p1 p2+++++-- parsers++-- | Parse a row of numbers, separated by `sep`+rowNums :: A.Parser s -> A.Parser [Scientific]+rowNums = A.sepBy A.scientific++rowNumSpace :: A.Parser [Scientific]+rowNumSpace = rowNums space++-- | parse a grid of numbers, separated by `sep`+gridNum :: A.Parser s -> A.Parser [[Scientific]]+gridNum sep = A.sepBy (rowNums sep) A.endOfLine
+ app/scatter/Main.hs view
@@ -0,0 +1,47 @@+module Main where++import Control.Monad (forM_)++import qualified Data.Colour as C+import qualified Data.Colour.Names as C+import Data.Scientific (Scientific, toRealFloat)+import qualified Data.Text as T +import qualified Data.Text.IO as T (readFile, writeFile)+import Text.Blaze.Svg.Renderer.String (renderSvg)++import Graphics.Rendering.Plot.Light+import Graphics.Rendering.Plot.Light.PlotTypes++xPlot = 400+yPlot = 300+fnameOut = "data/scatter-1.svg"++fdat = FigureData xPlot yPlot 0.1 0.8 0.1 0.9 10++dats = zipWith LabeledPoint p_ l_ where+  l_ = [-5, -4 .. ]+  p_ = zipWith Point [4,7,12,23,90,34,24,5,6,12,3] [43,23,1,23,8,11,17,25,4,5]++spdata = ScatterPointData Circle 3 3 C.red+++main = do+  let+    frameTo = frameFromFigData fdat+    frameFrom = frameFromPoints $ _lp <$> dats+    vmin = minimum $ _lplabel <$> dats+    vmax = maximum $ _lplabel <$> dats     +    f l sz = 10/(1 + exp(-(0.3 * x)))+      where x = l + sz+    g _ w = w+    h l col = C.blend l' C.blue col+      where+        l' = (l - vmin)/(vmax - vmin)+    dats' = moveLabeledPointBwFrames frameFrom frameTo False True <$> dats+    svg_t = svgHeader xPlot yPlot $ do+      axes fdat frameFrom 2 C.black 10 10+      scatterLP f g h spdata dats'+      scatterLPBar fdat 50 vmin vmax 3 TopRight 100 f g h spdata+  -- putStrLn $ renderSvg svg_t+  T.writeFile fnameOut $ T.pack $ renderSvg svg_t+    
+ app/timeseries/Main.hs view
@@ -0,0 +1,93 @@+{-# language OverloadedStrings #-}+module Main where++-- import Control.Arrow ((***), (&&&))++import Graphics.Rendering.Plot.Light+import Graphics.Rendering.Plot.Light.PlotTypes+  +import qualified Data.Attoparsec.Text as A+import qualified Attoparsec.Time.Text as AT+import qualified Data.Text as T +import qualified Data.Text.IO as T (readFile, writeFile)+import Data.Scientific (Scientific, toRealFloat)+import Text.Blaze.Svg.Renderer.String (renderSvg)+import qualified Data.Colour.Names as C++import Control.Applicative ((<|>))+import Data.Time (Day, TimeOfDay)++fname = "data/forex"++xPlot = 400+yPlot = 300+fnameOut = "data/forex_plot_5.svg"++fdat = FigureData xPlot yPlot 0.1 0.9 0.1 0.85 10+++main = do+  dat <- T.readFile fname+  let pd = A.parseOnly parseFxDataset dat+  case pd of Left e -> error e+             Right d -> +               do+               let+                 lps =  tspToLP fhi (\_ x -> x) <$> d+                 -- figure = tsAxis fdat fop fcl fhi flo 1 C.black (-45) Nothing Nothing lps       +                 figure = tsAxis' fdat flo fhi C.magenta lps+                 svg_t = svgHeader xPlot yPlot figure+               -- putStrLn $ renderSvg svg_t+               T.writeFile fnameOut $ T.pack $ renderSvg svg_t+                 where+                   fhi = toFloat . rateHigh+                   flo = toFloat . rateLow+                   fop = toFloat . rateOpen+                   fcl = toFloat . rateClose+++++avgTs :: FxRow Scientific -> Float+avgTs x = 0.5 * (h + l) where+  h = toFloat (rateHigh x)+  l = toFloat (rateLow x)++++++-- Forex time series parsers - related++++++++++-- * Forex dataset++parseFxDataset :: A.Parser [TsPoint (FxRow Scientific)]+parseFxDataset = A.sepBy parseFxRow A.endOfLine++parseFxRow :: A.Parser (TsPoint (FxRow Scientific))+parseFxRow = do+  (d, t) <- parseDateTime+  _ <- comma+  open <- A.scientific+  _ <- comma+  hi <- A.scientific+  _ <- comma+  lo <- A.scientific+  _ <- comma+  close <- A.scientific+  pure $ Tsp (Tick d t) (FxRow open hi lo close)++parseDateTime :: A.Parser (Day, TimeOfDay)+parseDateTime = do+  d <- AT.dayInISO8601+  _ <- space+  t <- AT.timeOfDayInISO8601+  return (d, t)
+ data/forex view
@@ -0,0 +1,174 @@+2017-06-26 21:00:00,1.0876,1.0880,1.0872,1.0874+2017-06-26 20:00:00,1.0873,1.0875,1.0872,1.0875+2017-06-26 19:00:00,1.0874,1.0875,1.0873,1.0874+2017-06-26 18:00:00,1.0870,1.0875,1.0870,1.0875+2017-06-26 17:00:00,1.0873,1.0873,1.0870,1.0870+2017-06-26 16:00:00,1.0869,1.0873,1.0867,1.0873+2017-06-26 15:00:00,1.0873,1.0876,1.0869,1.0870+2017-06-26 14:00:00,1.0875,1.0877,1.0871,1.0873+2017-06-26 13:00:00,1.0882,1.0883,1.0875,1.0875+2017-06-26 12:00:00,1.0882,1.0888,1.0880,1.0885+2017-06-26 11:00:00,1.0881,1.0882,1.0879,1.0881+2017-06-26 10:00:00,1.0881,1.0883,1.0879,1.0881+2017-06-26 09:00:00,1.0864,1.0879,1.0862,1.0879+2017-06-26 08:00:00,1.0858,1.0866,1.0858,1.0862+2017-06-26 07:00:00,1.0860,1.0862,1.0857,1.0860+2017-06-26 06:00:00,1.0855,1.0859,1.0854,1.0859+2017-06-26 05:00:00,1.0857,1.0859,1.0856,1.0856+2017-06-26 04:00:00,1.0858,1.0859,1.0857,1.0857+2017-06-26 03:00:00,1.0855,1.0859,1.0855,1.0858+2017-06-26 02:00:00,1.0856,1.0857,1.0855,1.0855+2017-06-26 01:00:00,1.0855,1.0858,1.0855,1.0856+2017-06-26 00:00:00,1.0856,1.0856,1.0855,1.0856+2017-06-25 23:00:00,1.0855,1.0856,1.0854,1.0855+2017-06-25 22:00:00,1.0855,1.0857,1.0851,1.0855+2017-06-25 21:00:00,1.0859,1.0863,1.0851,1.0855+2017-06-23 20:00:00,1.0855,1.0858,1.0852,1.0852+2017-06-23 19:00:00,1.0852,1.0855,1.0851,1.0855+2017-06-23 18:00:00,1.0854,1.0856,1.0852,1.0852+2017-06-23 17:00:00,1.0856,1.0856,1.0852,1.0854+2017-06-23 16:00:00,1.0853,1.0854,1.0851,1.0854+2017-06-23 15:00:00,1.0850,1.0853,1.0849,1.0853+2017-06-23 14:00:00,1.0852,1.0853,1.0847,1.0848+2017-06-23 13:00:00,1.0856,1.0859,1.0849,1.0849+2017-06-23 12:00:00,1.0856,1.0856,1.0851,1.0854+2017-06-23 11:00:00,1.0848,1.0856,1.0848,1.0856+2017-06-23 10:00:00,1.0854,1.0855,1.0845,1.0848+2017-06-23 09:00:00,1.0842,1.0852,1.0841,1.0852+2017-06-23 08:00:00,1.0844,1.0844,1.0837,1.0843+2017-06-23 07:00:00,1.0842,1.0848,1.0840,1.0845+2017-06-23 06:00:00,1.0838,1.0845,1.0838,1.0842+2017-06-23 05:00:00,1.0837,1.0839,1.0837,1.0838+2017-06-23 04:00:00,1.0837,1.0838,1.0836,1.0837+2017-06-23 03:00:00,1.0837,1.0837,1.0836,1.0836+2017-06-23 02:00:00,1.0838,1.0838,1.0835,1.0836+2017-06-23 01:00:00,1.0837,1.0839,1.0836,1.0837+2017-06-23 00:00:00,1.0837,1.0838,1.0835,1.0837+2017-06-22 23:00:00,1.0838,1.0838,1.0836,1.0837+2017-06-22 22:00:00,1.0839,1.0843,1.0837,1.0838+2017-06-22 21:00:00,1.0838,1.0856,1.0837,1.0838+2017-06-22 20:00:00,1.0838,1.0839,1.0837,1.0838+2017-06-22 19:00:00,1.0842,1.0842,1.0836,1.0837+2017-06-22 18:00:00,1.0841,1.0843,1.0840,1.0841+2017-06-22 17:00:00,1.0845,1.0847,1.0840,1.0841+2017-06-22 16:00:00,1.0847,1.0848,1.0843,1.0845+2017-06-22 15:00:00,1.0848,1.0851,1.0843,1.0845+2017-06-22 14:00:00,1.0852,1.0858,1.0844,1.0850+2017-06-22 13:00:00,1.0860,1.0864,1.0851,1.0851+2017-06-22 12:00:00,1.0873,1.0873,1.0862,1.0862+2017-06-22 11:00:00,1.0869,1.0873,1.0868,1.0871+2017-06-22 10:00:00,1.0871,1.0874,1.0869,1.0870+2017-06-22 09:00:00,1.0870,1.0871,1.0866,1.0870+2017-06-22 08:00:00,1.0861,1.0870,1.0860,1.0869+2017-06-22 07:00:00,1.0857,1.0862,1.0855,1.0861+2017-06-22 06:00:00,1.0863,1.0864,1.0857,1.0857+2017-06-22 05:00:00,1.0863,1.0864,1.0862,1.0863+2017-06-22 04:00:00,1.0863,1.0864,1.0861,1.0863+2017-06-22 03:00:00,1.0860,1.0863,1.0860,1.0863+2017-06-22 02:00:00,1.0862,1.0862,1.0859,1.0860+2017-06-22 01:00:00,1.0859,1.0863,1.0859,1.0863+2017-06-22 00:00:00,1.0861,1.0863,1.0860,1.0860+2017-06-21 23:00:00,1.0861,1.0862,1.0860,1.0861+2017-06-21 22:00:00,1.0861,1.0862,1.0860,1.0861+2017-06-21 21:00:00,1.0862,1.0866,1.0860,1.0861+2017-06-21 20:00:00,1.0861,1.0862,1.0859,1.0861+2017-06-21 19:00:00,1.0862,1.0862,1.0860,1.0860+2017-06-21 18:00:00,1.0860,1.0862,1.0860,1.0861+2017-06-21 17:00:00,1.0858,1.0861,1.0855,1.0859+2017-06-21 16:00:00,1.0860,1.0862,1.0858,1.0858+2017-06-21 15:00:00,1.0864,1.0864,1.0858,1.0858+2017-06-21 14:00:00,1.0859,1.0866,1.0858,1.0865+2017-06-21 13:00:00,1.0859,1.0861,1.0854,1.0856+2017-06-21 12:00:00,1.0860,1.0862,1.0858,1.0860+2017-06-21 11:00:00,1.0864,1.0865,1.0856,1.0860+2017-06-21 10:00:00,1.0855,1.0863,1.0855,1.0863+2017-06-21 09:00:00,1.0855,1.0858,1.0854,1.0854+2017-06-21 08:00:00,1.0848,1.0854,1.0846,1.0854+2017-06-21 07:00:00,1.0852,1.0853,1.0848,1.0850+2017-06-21 06:00:00,1.0852,1.0853,1.0849,1.0851+2017-06-21 05:00:00,1.0851,1.0852,1.0851,1.0851+2017-06-21 04:00:00,1.0851,1.0852,1.0850,1.0851+2017-06-21 03:00:00,1.0851,1.0853,1.0851,1.0852+2017-06-21 02:00:00,1.0855,1.0855,1.0849,1.0851+2017-06-21 01:00:00,1.0854,1.0855,1.0853,1.0855+2017-06-21 00:00:00,1.0856,1.0856,1.0850,1.0852+2017-06-20 23:00:00,1.0856,1.0857,1.0855,1.0856+2017-06-20 22:00:00,1.0866,1.0871,1.0856,1.0856+2017-06-20 21:00:00,1.0858,1.0870,1.0856,1.0861+2017-06-20 20:00:00,1.0855,1.0858,1.0855,1.0858+2017-06-20 19:00:00,1.0855,1.0857,1.0854,1.0855+2017-06-20 18:00:00,1.0857,1.0858,1.0855,1.0855+2017-06-20 17:00:00,1.0857,1.0859,1.0856,1.0858+2017-06-20 16:00:00,1.0858,1.0861,1.0857,1.0858+2017-06-20 15:00:00,1.0860,1.0862,1.0858,1.0860+2017-06-20 14:00:00,1.0859,1.0861,1.0857,1.0859+2017-06-20 13:00:00,1.0864,1.0865,1.0858,1.0859+2017-06-20 12:00:00,1.0854,1.0867,1.0854,1.0865+2017-06-20 11:00:00,1.0864,1.0864,1.0854,1.0855+2017-06-20 10:00:00,1.0861,1.0865,1.0860,1.0865+2017-06-20 09:00:00,1.0871,1.0875,1.0857,1.0864+2017-06-20 08:00:00,1.0874,1.0877,1.0868,1.0870+2017-06-20 07:00:00,1.0879,1.0880,1.0864,1.0872+2017-06-20 06:00:00,1.0878,1.0881,1.0877,1.0880+2017-06-20 05:00:00,1.0881,1.0882,1.0877,1.0877+2017-06-20 04:00:00,1.0879,1.0882,1.0878,1.0880+2017-06-20 03:00:00,1.0880,1.0881,1.0879,1.0879+2017-06-20 02:00:00,1.0880,1.0881,1.0878,1.0880+2017-06-20 01:00:00,1.0879,1.0880,1.0878,1.0880+2017-06-20 00:00:00,1.0880,1.0881,1.0878,1.0878+2017-06-19 23:00:00,1.0880,1.0880,1.0877,1.0880+2017-06-19 22:00:00,1.0882,1.0883,1.0879,1.0879+2017-06-19 21:00:00,1.0878,1.0890,1.0875,1.0882+2017-06-19 20:00:00,1.0878,1.0879,1.0877,1.0878+2017-06-19 19:00:00,1.0879,1.0879,1.0877,1.0879+2017-06-19 18:00:00,1.0879,1.0879,1.0876,1.0877+2017-06-19 17:00:00,1.0875,1.0879,1.0875,1.0878+2017-06-19 16:00:00,1.0877,1.0879,1.0875,1.0876+2017-06-19 15:00:00,1.0877,1.0879,1.0873,1.0877+2017-06-19 14:00:00,1.0883,1.0883,1.0877,1.0881+2017-06-19 13:00:00,1.0877,1.0885,1.0875,1.0885+2017-06-19 12:00:00,1.0869,1.0882,1.0868,1.0882+2017-06-19 11:00:00,1.0879,1.0880,1.0869,1.0870+2017-06-19 10:00:00,1.0876,1.0880,1.0873,1.0878+2017-06-19 09:00:00,1.0880,1.0881,1.0875,1.0876+2017-06-19 08:00:00,1.0883,1.0885,1.0877,1.0881+2017-06-19 07:00:00,1.0903,1.0903,1.0889,1.0890+2017-06-19 06:00:00,1.0905,1.0910,1.0904,1.0905+2017-06-19 05:00:00,1.0905,1.0905,1.0903,1.0904+2017-06-19 04:00:00,1.0902,1.0906,1.0902,1.0905+2017-06-19 03:00:00,1.0903,1.0903,1.0901,1.0902+2017-06-19 02:00:00,1.0904,1.0905,1.0902,1.0903+2017-06-19 01:00:00,1.0903,1.0905,1.0903,1.0904+2017-06-19 00:00:00,1.0906,1.0906,1.0902,1.0902+2017-06-18 23:00:00,1.0905,1.0905,1.0902,1.0905+2017-06-18 22:00:00,1.0903,1.0905,1.0901,1.0905+2017-06-18 21:00:00,1.0911,1.0911,1.0902,1.0907+2017-06-16 20:00:00,1.0900,1.0907,1.0898,1.0906+2017-06-16 19:00:00,1.0901,1.0902,1.0898,1.0900+2017-06-16 18:00:00,1.0904,1.0904,1.0900,1.0902+2017-06-16 17:00:00,1.0901,1.0902,1.0899,1.0901+2017-06-16 16:00:00,1.0902,1.0902,1.0898,1.0901+2017-06-16 15:00:00,1.0898,1.0902,1.0893,1.0901+2017-06-16 14:00:00,1.0890,1.0898,1.0886,1.0898+2017-06-16 13:00:00,1.0886,1.0888,1.0883,1.0884+2017-06-16 12:00:00,1.0885,1.0891,1.0884,1.0886+2017-06-16 11:00:00,1.0889,1.0890,1.0885,1.0885+2017-06-16 10:00:00,1.0881,1.0893,1.0881,1.0890+2017-06-16 09:00:00,1.0882,1.0883,1.0877,1.0882+2017-06-16 08:00:00,1.0876,1.0882,1.0876,1.0882+2017-06-16 07:00:00,1.0871,1.0876,1.0869,1.0875+2017-06-16 06:00:00,1.0870,1.0874,1.0867,1.0874+2017-06-16 05:00:00,1.0871,1.0872,1.0869,1.0870+2017-06-16 04:00:00,1.0871,1.0872,1.0870,1.0870+2017-06-16 03:00:00,1.0871,1.0872,1.0870,1.0871+2017-06-16 02:00:00,1.0872,1.0872,1.0869,1.0871+2017-06-16 01:00:00,1.0872,1.0873,1.0870,1.0872+2017-06-16 00:00:00,1.0874,1.0874,1.0871,1.0872+2017-06-15 23:00:00,1.0872,1.0873,1.0871,1.0872+2017-06-15 22:00:00,1.0875,1.0875,1.0871,1.0872+2017-06-15 21:00:00,1.0873,1.0876,1.0871,1.0875+2017-06-15 20:00:00,1.0874,1.0875,1.0871,1.0873+2017-06-15 19:00:00,1.0875,1.0875,1.0873,1.0873+2017-06-15 18:00:00,1.0874,1.0875,1.0873,1.0874+2017-06-15 17:00:00,1.0872,1.0874,1.0871,1.0872+2017-06-15 16:00:00,1.0873,1.0874,1.0871,1.0871
+ data/heatmap-bw view
@@ -0,0 +1,6 @@+6 5 4 3 1 0+3 2 2 0 0 1+0 0 0 0 1 0+0 0 0 0 2 3+0 0 1 2 4 3+0 1 2 3 4 5
+ plot-light-examples.cabal view
@@ -0,0 +1,68 @@+name:                plot-light-examples+version:             0.1.0.0+synopsis:            Example binaries for plot-light+description:         Example binaries for plot-light+homepage:            https://github.com/ocramz/plot-light-examples+license:             BSD3+license-file:        LICENSE+author:              Marco Zocca+maintainer:          zocca.marco gmail+copyright:           2018 Marco Zocca+category:            Graphics+build-type:          Simple+extra-source-files:  README.md+cabal-version:       >=1.10+tested-with:         GHC == 8.0.2, GHC == 8.4.1+data-dir:            data+data-files:          forex+                     heatmap-bw                     ++executable scatter+  default-language:    Haskell2010+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N+  hs-source-dirs:      app/scatter+  main-is:             Main.hs+  build-depends:       base >= 4.7 && < 5+                     , plot-light >= 0.2.9+                     , attoparsec+                     , text+                     , colour+                     , blaze-svg+                     , scientific+                                          +executable timeseries+  default-language:    Haskell2010+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N+  hs-source-dirs:      app/timeseries+  main-is:             Main.hs+  build-depends:       base >= 4.7 && < 5+                     , plot-light >= 0.2.9+                     , attoparsec+                     , attoparsec-time >= 1+                     , time+                     , text+                     , colour+                     , blaze-svg+                     , scientific++executable heatmap+  default-language:    Haskell2010+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N+  hs-source-dirs:      app/heatmap+  main-is:             Main.hs+  build-depends:       base >= 4.7 && < 5+                     , plot-light >= 0.2.9+                     , attoparsec+                     , time+                     , text+                     , colour+                     -- , palette+                     , blaze-svg+                     , scientific           +  ++++source-repository head+  type:     git+  location: https://github.com/ocramz/plot-light-examples