{-# LANGUAGE OverloadedStrings #-} -- -- Based on the Elm VegaLite SortTests.elm as of version 1.12.0 -- module SortTests (testSpecs) where import qualified Data.Text as T import Graphics.Vega.VegaLite hiding (filter, repeat) testSpecs :: [(String, VegaLite)] testSpecs = [ ("ascending", sortAsc) , ("descending", sortDesc) , ("weighted", sortWeight) , ("custom", sortCustom) , ("stack1", stack1) ] sortQuant :: T.Text -> [SortProperty] -> VegaLite sortQuant yField sps = let datavals = dataFromColumns [] . dataColumn "Horsepower" (Numbers [ 1, 5, 2, 3, 4 ]) . dataColumn "Weight_in_lbs" (Numbers [ 19, 21, 58, 12, 13 ]) enc = encoding . position X [ PName "Horsepower", PmType Quantitative, PSort sps ] . position Y [ PName yField, PmType Quantitative ] . order [ OName yField, OmType Ordinal ] in toVegaLite [ height 300, datavals [], enc [], mark Line [ MStrokeWidth 0.5 ] ] sortAsc, sortDesc :: VegaLite sortAsc = sortQuant "Horsepower" [ Ascending ] sortDesc = sortQuant "Horsepower" [ Descending ] sortWeight :: VegaLite sortWeight = sortQuant "Weight_in_lbs" [ ByFieldOp "Weight_in_lbs" Mean ] sortCustom :: VegaLite sortCustom = let datavals = dataFromColumns [] . dataColumn "a" (Strings [ "A", "B", "C", "Z", "Y", "X" ]) . dataColumn "b" (Numbers [ 28, 55, 43, 91, 81, 53 ]) enc = encoding . position X [ PName "a" , PmType Ordinal , PSort [ CustomSort (Strings [ "B", "A", "C" ]) ] ] . position Y [ PName "b", PmType Quantitative ] in toVegaLite [ datavals [], enc [], mark Bar [] ] stack1 :: VegaLite stack1 = let cars = dataFromUrl "https://vega.github.io/vega-lite/data/cars.json" [] trans = transform . aggregate [ opAs Count "" "count_*" ] [ "Origin", "Cylinders" ] . stack "count_*" [] "stack_count_Origin1" "stack_count_Origin2" [ StOffset StNormalize, StSort [ WAscending "Origin" ] ] . window [ ( [ WAggregateOp Min, WField "stack_count_Origin1" ], "x" ) , ( [ WAggregateOp Max, WField "stack_count_Origin2" ], "x2" ) ] [ WFrame Nothing Nothing, WGroupBy [ "Origin" ] ] . stack "count_*" [ "Origin" ] "y" "y2" [ StOffset StNormalize, StSort [ WAscending "Cylinders" ] ] enc = encoding . position X [ PName "x", PmType Quantitative, PAxis [] ] . position X2 [ PName "x2" ] . position Y [ PName "y", PmType Quantitative, PAxis [] ] . position Y2 [ PName "y2" ] . color [ MName "Origin", MmType Nominal ] . opacity [ MName "Cylinders", MmType Quantitative, MLegend [] ] . tooltips [ [ TName "Origin", TmType Nominal ] , [ TName "Cylinders", TmType Quantitative ] ] in toVegaLite [ cars, trans [], enc [], mark Rect [] ]