{-# LANGUAGE OverloadedStrings #-} -- -- Based on the Elm VegaLite GalleryRepeat.elm (from development of version -- 1.13.0) -- module Gallery.Repeat (testSpecs) where import Graphics.Vega.VegaLite import Prelude hiding (filter, lookup, repeat) testSpecs :: [(String, VegaLite)] testSpecs = [ ("repeat1", repeat1) , ("repeat2", repeat2) , ("repeat3", repeat3) , ("repeat4", repeat4) , ("repeat5", repeat5) ] repeat1 :: VegaLite repeat1 = let des = description "Monthly weather information for individual years and overall average for Seatle and New York" enc1 = encoding . position X [ PName "date", PmType Ordinal, PTimeUnit Month ] . position Y [ PRepeat Column, PmType Quantitative, PAggregate Mean ] . detail [ DName "date", DmType Temporal, DTimeUnit Year ] . color [ MName "location", MmType Nominal ] . opacity [ MNumber 0.2 ] spec1 = asSpec [ mark Line [], enc1 [] ] enc2 = encoding . position X [ PName "date", PmType Ordinal, PTimeUnit Month ] . position Y [ PRepeat Column, PmType Quantitative, PAggregate Mean ] . color [ MName "location", MmType Nominal ] spec2 = asSpec [ mark Line [], enc2 [] ] spec = asSpec [ layer [ spec1, spec2 ] ] in toVegaLite [ des , dataFromUrl "https://vega.github.io/vega-lite/data/weather.csv" [] , repeat [ ColumnFields [ "temp_max", "precipitation", "wind" ] ] , specification spec ] repeat2 :: VegaLite repeat2 = let desc = description "Two vertically concatenated charts that show a histogram of precipitation in Seattle and the relationship between min and max temperature" trans = transform . filter (FExpr "datum.location === 'Seattle'") enc1 = encoding . position X [ PName "date", PTimeUnit Month, PmType Ordinal ] . position Y [ PName "precipitation", PmType Quantitative, PAggregate Mean ] spec1 = asSpec [ mark Bar [], enc1 [] ] enc2 = encoding . position X [ PName "temp_min", PmType Quantitative, PBin [] ] . position Y [ PName "temp_max", PmType Quantitative, PBin [] ] . size [ MAggregate Count, MmType Quantitative ] spec2 = asSpec [ mark Point [], enc2 [] ] in toVegaLite [ desc , trans [] , dataFromUrl "https://vega.github.io/vega-lite/data/weather.csv" [] , vConcat [ spec1, spec2 ] ] repeat3 :: VegaLite repeat3 = let des = description "Horizontally repeated charts that show the histograms of different parameters of cars in different countries" enc = encoding . position X [ PRepeat Column, PmType Quantitative, PBin [] ] . position Y [ PmType Quantitative, PAggregate Count ] . color [ MName "Origin", MmType Nominal ] spec = asSpec [ dataFromUrl "https://vega.github.io/vega-lite/data/cars.json" [] , mark Bar [] , enc [] ] in toVegaLite [ des , repeat [ ColumnFields [ "Horsepower", "Miles_per_Gallon", "Acceleration" ] ] , specification spec ] repeat4 :: VegaLite repeat4 = let des = description "Scatterplot matrix" sel = selection . select "myBrush" Interval [ On "[mousedown[event.shiftKey], window:mouseup] > window:mousemove!" , Translate "[mousedown[event.shiftKey], window:mouseup] > window:mousemove!" , Zoom "wheel![event.shiftKey]" , ResolveSelections Union ] . select "grid" Interval [ BindScales , Translate "[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!" , Zoom "wheel![event.shiftKey]" , ResolveSelections Global ] enc = encoding . position X [ PRepeat Column, PmType Quantitative ] . position Y [ PRepeat Row, PmType Quantitative ] . color [ MSelectionCondition (SelectionName "myBrush") [ MName "Origin", MmType Nominal ] [ MString "grey" ] ] spec = asSpec [ dataFromUrl "https://vega.github.io/vega-lite/data/cars.json" [] , mark Point [] , sel [] , enc [] ] in toVegaLite [ des , repeat [ RowFields [ "Horsepower", "Acceleration", "Miles_per_Gallon" ] , ColumnFields [ "Miles_per_Gallon", "Acceleration", "Horsepower" ] ] , specification spec ] repeat5 :: VegaLite repeat5 = let des = description "Marginal histograms show the counts along the x and y dimension" config = configure . configuration (RangeStyle [ RHeatmap "greenblue" ]) . configuration (ViewStyle [ ViewNoStroke ]) enc1 = encoding . position X [ PName "IMDB_Rating", PmType Quantitative, PAxis [], PBin [] ] . position Y [ PAggregate Count , PmType Quantitative , PScale [ SDomain (DNumbers [ 0, 1000 ]) ] , PAxis [ AxNoTitle ] ] spec1 = asSpec [ height 60, mark Bar [], enc1 [] ] spec2 = asSpec [ spacing 15, bounds Flush, hConcat [ spec2_1, spec2_2 ] ] enc2_1 = encoding . position X [ PName "IMDB_Rating", PmType Quantitative, PBin [] ] . position Y [ PName "Rotten_Tomatoes_Rating", PmType Quantitative, PBin [] ] . color [ MAggregate Count, MmType Quantitative ] spec2_1 = asSpec [ mark Rect [], enc2_1 [] ] enc2_2 = encoding . position Y [ PName "Rotten_Tomatoes_Rating" , PmType Quantitative , PBin [] , PAxis [] ] . position X [ PAggregate Count , PmType Quantitative , PScale [ SDomain (DNumbers [ 0, 1000 ]) ] , PAxis [ AxNoTitle ] ] spec2_2 = asSpec [ width 60, mark Bar [], enc2_2 [] ] in toVegaLite [ des , spacing 15 , bounds Flush , config [] , dataFromUrl "https://vega.github.io/vega-lite/data/movies.json" [] , vConcat [ spec1, spec2 ] ]