module Graphics.Rendering.Plot.Light.PlotTypes.TimeSeries where
import GHC.Real
import Data.Fixed (Pico)
import Data.Time
import Data.Scientific
import qualified Data.Text as T
import Graphics.Rendering.Plot.Light.Internal
import Data.TimeSeries
import Text.Blaze.Svg
import qualified Data.Colour as C
import qualified Data.Colour.Names as C
import Text.Blaze.Svg.Renderer.String (renderSvg)
tsAxis fval wFig hFig sw col rot ps = dat'
where
lpFun = tspToLP fval (\t _ -> show t)
dat = lpFun <$> ps
frameFrom = frameFromDataset dat
frameTo = mkFrameOrigin wFig hFig
dat' = moveLabeledPointV2Frames frameFrom frameTo (mempty :: DiagMat2 Scientific) (V2 0 0) <$> dat
nth xss n = reverse $ go xss n [] where
go (_:xs) i l | i>0 = go xs (i1) l
go (x:xs) i l | i==0 = go xs n (x : l)
go [] _ l = l
tspToLP :: Fractional a =>
(t -> a)
-> (Tick -> t -> l)
-> TsPoint t
-> LabeledPoint l a
tspToLP fy g = LabeledPoint <$> pf <*> lf where
pf = Point <$> tickToFractional <*> fy . _val
lf = g <$> _tick <*> _val
tickToFractional :: Fractional b => TsPoint a -> b
tickToFractional = fromRational . fromTick . _tick
fromTick :: Tick -> Rational
fromTick (Tick d t) = fromIntegral (toModifiedJulianDay d) + timeOfDayToDayFraction t
mkTick :: Integer -> Int -> Int -> Int -> Int -> Pico -> Maybe Tick
mkTick yy mm dd hr mi se = do
tim <- makeTimeOfDayValid hr mi se
let d = fromGregorian yy mm dd
return $ Tick d tim