mirror of
https://github.com/logos-storage/transport-over-mix.git
synced 2026-07-22 02:20:21 +00:00
102 lines
2.4 KiB
Haskell
102 lines
2.4 KiB
Haskell
|
|
-- | Do some plotting (useful especially during development)
|
|
--
|
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
module Simulate.Plots where
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
import Control.Monad
|
|
|
|
import qualified Data.Text as T
|
|
import qualified Data.Text.IO as T
|
|
import qualified Data.Text.Encoding as T
|
|
import qualified Data.ByteString as B
|
|
import qualified Data.ByteString.Char8 as C
|
|
|
|
import Simulate.Distributions
|
|
import Simulate.Plots.ITerm2
|
|
|
|
import Granite.Svg
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
newtype SVG = SVG B.ByteString
|
|
|
|
makeSVG :: T.Text -> SVG
|
|
makeSVG text = SVG (T.encodeUtf8 text)
|
|
|
|
plotSVG :: SVG -> IO ()
|
|
plotSVG (SVG svg) = do
|
|
let terminal = itermLegacyImage svg
|
|
C.putStrLn terminal
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
testPlotSVG = do
|
|
xs <- testSamples
|
|
|
|
let nbins = 100
|
|
let title = T.pack $ "histogram; nbins = " ++ show nbins
|
|
|
|
let svg = makeSVG $ histogram
|
|
(bins nbins (-4) 4)
|
|
xs
|
|
(defPlot
|
|
{ widthChars = 80
|
|
, heightChars = 20
|
|
, legendPos = LegendBottom
|
|
, xFormatter = \_ _ v -> T.pack (show (round v :: Int))
|
|
, xNumTicks = 10
|
|
, yNumTicks = 5
|
|
, plotTitle = title
|
|
})
|
|
|
|
plotSVG svg
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
{-
|
|
|
|
-- note: terminal plotting in Granite looks very buggy on my machine
|
|
|
|
import Granite
|
|
|
|
testPlotTerminal = do
|
|
xs <- testSamples
|
|
|
|
let nbins = 30
|
|
let title = T.pack $ "histogram; nbins = " ++ show nbins
|
|
|
|
let text = histogram
|
|
(bins nbins (-4) 4)
|
|
xs
|
|
(defPlot
|
|
{ widthChars = 80
|
|
, heightChars = 20
|
|
, legendPos = LegendBottom
|
|
, xFormatter = \_ _ v -> T.pack (show (round v :: Int))
|
|
, xNumTicks = 10
|
|
, yNumTicks = 5
|
|
, plotTitle = title
|
|
})
|
|
|
|
T.putStrLn text
|
|
|
|
-}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
testSamples = do
|
|
let gauss = GaussDistr 0 1
|
|
let expo = ExpoDistr 2
|
|
let trunc = BiTruncExpoDistr (0.3, 5.0) expo
|
|
|
|
xs <- sampleN trunc 10000
|
|
putStrLn $ "mean = " ++ show (average xs)
|
|
putStrLn $ "std dev = " ++ show (deviation xs)
|
|
return xs
|
|
|
|
--------------------------------------------------------------------------------
|