content: {-# LANGUAGE OverloadedStrings #-}
  
  module Gallery.Histogram (testSpecs) where
  
  import Graphics.Vega.VegaLite
  
  import Prelude hiding (filter, lookup, repeat)
  
  testSpecs :: [(String, VegaLite)]
  testSpecs = [ ("histogram_rel_freq", histogramRelFreq) ]
  
  
  carData :: Data
  carData = dataFromUrl "https://vega.github.io/vega-lite/data/cars.json" []
  
  
  histogramRelFreq :: VegaLite
  histogramRelFreq =
    let desc = "Relative frequency histogram. The data is binned with first transform. The number of values per bin and the total number are calculated in the second and third transform to calculate the relative frequency in the last transformation step."
  
        trans = transform
                . binAs [AlreadyBinned True] "Horsepower" "bin_Horsepwoer"   -- intentional typo
                . aggregate [opAs Count "" "Count"] ["bin_Horsepwoer", "bin_Horsepwoer_end"]
                . joinAggregate [opAs Sum "Count" "TotalCount"] []
                . calculateAs "datum.Count/datum.TotalCount" "PercentOfTotal"
                $ []
  
        enc = encoding
              . position X [ PName "bin_Horsepwoer"
                           , PmType Quantitative
                           , PTitle "Horsepower"
                           , PBin [AlreadyBinned True]
                           ]
              . position X2 [PName "bin_Horsepwoer_end"]
              . position Y [ PName "PercentOfTotal"
                           , PmType Quantitative
                           , PTitle "Relative Frequency"
                           , PAxis [AxFormat ".1~%"]
                           ]
  
    in toVegaLite [ description desc
                  , carData
                  , trans
                  , mark Bar [MTooltip TTEncoding]
                  , enc []
                  ]
  
  