content: {-# LANGUAGE OverloadedStrings #-}
  
  --
  -- Based on the Elm VegaLite GalleryError.elm (from development of version
  -- 1.13.0)
  --
  module Gallery.Error (testSpecs) where
  
  import Graphics.Vega.VegaLite
  
  -- import qualified Data.Text as T
  
  import Prelude hiding (filter, lookup, repeat)
  
  testSpecs :: [(String, VegaLite)]
  testSpecs = [ ("error1", error1)
              , ("error2", error2)
              , ("error3", error3)
              , ("error4", error4)
              ]
  
  
  error1 :: VegaLite
  error1 =
      let
          des =
              description "Error bars showing confidence intervals"
  
          encVariety =
              encoding . position Y [ PName "variety", PmType Ordinal ]
  
          encPoints =
              encoding
                  . position X
                      [ PName "yield"
                      , PmType Quantitative
                      , PAggregate Mean
                      , PScale [ SZero False ]
                      , PAxis [ AxTitle "Barley Yield" ]
                      ]
                  . color [ MString "black" ]
  
          specPoints =
              asSpec [ mark Point [ MFilled True ], encPoints [] ]
  
          encCIs =
              encoding
                  . position X [ PName "yield", PmType Quantitative, PAggregate CI0 ]
                  . position X2 [ PName "yield", PAggregate CI1 ]
  
          specCIs =
              asSpec [ mark Rule [], encCIs [] ]
      in
      toVegaLite
          [ des
          , dataFromUrl "https://vega.github.io/vega-lite/data/barley.json" []
          , encVariety []
          , layer [ specPoints, specCIs ]
          ]
  
  
  error2 :: VegaLite
  error2 =
      let
          des =
              description "Error bars showing standard deviations"
  
          trans =
              transform
                  . aggregate [ opAs Mean "yield" "mean", opAs Stdev "yield" "stdev" ] [ "variety" ]
                  . calculateAs "datum.mean-datum.stdev" "lower"
                  . calculateAs "datum.mean+datum.stdev" "upper"
  
          encVariety =
              encoding . position Y [ PName "variety", PmType Ordinal ]
  
          encMeans =
              encoding
                  . position X
                      [ PName "mean"
                      , PmType Quantitative
                      , PScale [ SZero False ]
                      , PAxis [ AxTitle "Barley Yield" ]
                      ]
                  . color [ MString "black" ]
  
          specMeans =
              asSpec [ mark Point [ MFilled True ], encMeans [] ]
  
          encStdevs =
              encoding
                  . position X [ PName "upper", PmType Quantitative ]
                  . position X2 [ PName "lower" ]
  
          specStdevs =
              asSpec [ mark Rule [], encStdevs [] ]
      in
      toVegaLite
          [ des
          , dataFromUrl "https://vega.github.io/vega-lite/data/barley.json" []
          , trans []
          , encVariety []
          , layer [ specMeans, specStdevs ]
          ]
  
  
  error3 :: VegaLite
  error3 =
      let
          des =
              description "Line chart with confidence interval band."
  
          encTime =
              encoding . position X [ PName "Year", PmType Temporal, PTimeUnit (TU Year) ]
  
          encBand =
              encoding
                  . position Y
                      [ PName "Miles_per_Gallon"
                      , PmType Quantitative
                      , PAggregate CI0
                      , PAxis [ AxTitle "Miles/Gallon" ]
                      ]
                  . position Y2
                      [ PName "Miles_per_Gallon"
                      , PAggregate CI1
                      ]
                  . opacity [ MNumber 0.3 ]
  
          specBand =
              asSpec [ mark Area [], encBand [] ]
  
          encLine =
              encoding
                  . position Y
                      [ PName "Miles_per_Gallon"
                      , PmType Quantitative
                      , PAggregate Mean
                      ]
  
          specLine =
              asSpec [ mark Line [], encLine [] ]
      in
      toVegaLite
          [ des
          , dataFromUrl "https://vega.github.io/vega-lite/data/cars.json" []
          , encTime []
          , layer [ specBand, specLine ]
          ]
  
  
  error4 :: VegaLite
  error4 =
      let
          des =
              description "A scatterplot showing horsepower and miles per gallon for various cars with a global mean and standard deviation overlay."
  
          encPoints =
              encoding
                  . position X [ PName "Horsepower", PmType Quantitative ]
                  . position Y [ PName "Miles_per_Gallon", PmType Quantitative ]
  
          specPoints =
              asSpec [ mark Point [], encPoints [] ]
  
          trans =
              transform
                  . aggregate
                      [ opAs Mean "Miles_per_Gallon" "mean_MPG"
                      , opAs Stdev "Miles_per_Gallon" "dev_MPG"
                      ]
                      []
                  . calculateAs "datum.mean_MPG+datum.dev_MPG" "upper"
                  . calculateAs "datum.mean_MPG-datum.dev_MPG" "lower"
  
          encMean =
              encoding . position Y [ PName "mean_MPG", PmType Quantitative ]
  
          specMean =
              asSpec [ mark Rule [], encMean [] ]
  
          encRect =
              encoding
                  . position Y [ PName "lower", PmType Quantitative ]
                  . position Y2 [ PName "upper" ]
                  . opacity [ MNumber 0.2 ]
  
          specRect =
              asSpec [ mark Rect [], encRect [] ]
  
          specSpread =
              asSpec [ trans [], layer [ specMean, specRect ] ]
      in
      toVegaLite
          [ des
          , dataFromUrl "https://vega.github.io/vega-lite/data/cars.json" []
          , layer [ specPoints, specSpread ]
          ]
  