plotlyhs-0.2: src/Graphics/Plotly/Simple.hs
{-# LANGUAGE OverloadedStrings #-}
{-|
Functions to build Traces from standard data. Generated traces can still be customized with lenses
-}
module Graphics.Plotly.Simple where
import Graphics.Plotly.Base
import Lens.Micro
import Data.Text (Text)
import Data.Aeson
-- |Generate a scatterplot from pairs
scatterPlot :: [(Double,Double)] -> Trace
scatterPlot xys = scatter & x ?~ map (toJSON .fst) xys
& y ?~ map (toJSON .snd) xys
& mode ?~ [Markers]
-- |Generate a line plot from pairs
linePlot :: [(Double,Double)] -> Trace
linePlot xys = scatter & x ?~ map (toJSON .fst) xys
& y ?~ map (toJSON .snd) xys
& mode ?~ [Lines]
-- |Generate a horizontal bar chart from pairs of text and value.
hbarChart :: [(Text, Double)] -> Trace
hbarChart tvs = bars & y ?~ map (toJSON . fst) tvs
& x ?~ map (toJSON .snd) tvs
& orientation ?~ Horizontal
-- |Generate a fan plot with a given width in standard deviations and
-- (x,(y,sd)) data
fanPlot :: Double -> [(Double, (Double, Double))] -> Trace
fanPlot sdCount tmnsds =
let xs = map fst tmnsds ++ reverse (map fst tmnsds)
ys = map ((\(m,sd) -> m+sdCount*sd) . snd) tmnsds
++ reverse ( map ((\(m,sd) -> m-sdCount*sd) . snd) tmnsds)
in scatter & x ?~ map toJSON xs & y ?~ map toJSON ys & fill ?~ ToZeroY