hgg-svg-0.1.0.0: examples/Tutorial04Distribution.hs
-- | Tutorial 04 ─ 分布の可視化。 群ごとの violin と box を並べる。
-- 分布系 mark は (群ラベル channel, 値 channel) を取る。
--
-- @
-- cabal run tutorial-04-distribution
-- @
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Graphics.Hgg.Backend.SVG (saveSVG)
import Graphics.Hgg.Unit (px, (*~))
import Graphics.Hgg.Spec
import Data.Text (Text)
main :: IO ()
main = do
-- 各 row が (群, 値)。 ここでは 3 群 × 各数点の小さな例。
let cats = inlineCat (concatMap (replicate 6)
(["control", "low", "high"] :: [Text]))
vals = inline ([ 4.8, 5.1, 5.3, 4.9, 5.0, 5.2 -- control
, 6.0, 6.4, 5.8, 6.2, 6.1, 6.3 -- low
, 7.1, 7.5, 6.9, 7.3, 7.0, 7.4 -- high
] :: [Double])
saveSVG "tutorial-04-violin.svg" $
purePlot
<> layer (violin vals <> groupBy cats)
<> title "Distribution: violin by group"
<> xLabel "dose" <> yLabel "response"
<> widthUnit (600 *~ px) <> heightUnit (400 *~ px)
saveSVG "tutorial-04-box.svg" $
purePlot
<> layer (boxplot vals <> groupBy cats)
<> title "Distribution: box by group"
<> xLabel "dose" <> yLabel "response"
<> widthUnit (600 *~ px) <> heightUnit (400 *~ px)
putStrLn "wrote tutorial-04-violin.svg / tutorial-04-box.svg"