content: {- TooManyCells.Paths.Plot
  Gregory W. Schwartz
  
  Collects the functions pertaining to plotting the path distances.
  -}
  
  {-# LANGUAGE QuasiQuotes #-}
  {-# LANGUAGE BangPatterns #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE StandaloneDeriving #-}
  {-# LANGUAGE FlexibleContexts #-}
  {-# LANGUAGE NoMonomorphismRestriction #-}
  {-# LANGUAGE GADTs #-}
  
  module TooManyCells.Paths.Plot
      ( plotPathDistanceR
      ) where
  
  -- Remote
  import BirchBeer.Types
  import Data.Char (toUpper)
  import Data.Colour.SRGB (sRGB24show)
  import Language.R as R
  import Language.R.QQ (r)
  import qualified Control.Lens as L
  import qualified Data.Graph.Inductive as G
  import qualified Data.Map.Strict as Map
  import qualified Data.Text as T
  
  -- Local
  import TooManyCells.Paths.Types
  
  -- | Plot clusters.
  plotPathDistanceR :: String
                    -> LabelColorMap
                    -> Bandwidth
                    -> [(Label, Double)]
                    -> R s ()
  plotPathDistanceR outputPlot (LabelColorMap cm) (Bandwidth b) distances = do
      let xs = fmap snd distances
          ls = fmap (T.unpack . unLabel . fst) distances
          (cls, ccs) = unzip
                     . fmap (L.over L._1 (T.unpack . unLabel) . L.over L._2 (fmap toUpper . sRGB24show))
                     . Map.toAscList
                     $ cm
  
      [r| suppressMessages(library(ggplot2))
          suppressMessages(library(cowplot))
          suppressMessages(library(RColorBrewer))
          suppressMessages(library(plyr))
          df = data.frame(x = xs_hs, l = ls_hs)
          spikeDf = ddply(df, "l", here(summarise), groupSpike = density(x, adjust = b_hs)$x[which.max(density(x, adjust = b_hs)$y)])
  
          p = ggplot(df, aes(x = x, color = l, fill = l)) +
                  geom_density(adjust = b_hs, alpha = 0.1) +
                  geom_vline(data = spikeDf, aes(xintercept = groupSpike, color = l), linetype="dashed") +
                  xlab("Path distance") +
                  ylab("Cell density") +
                  scale_color_manual(guide = guide_legend(title = ""), aesthetics = c("color", "fill"), values = setNames(c(ccs_hs, "NA"), c(cls_hs, "#000000"))) +
                  theme_cowplot() +
                  theme(aspect.ratio = 1)
  
          suppressMessages(ggsave(p, file = outputPlot_hs, height = 8, width = 12))
      |]
  
      return ()
  