hashtables-1.0.1.5: benchmark/src/Criterion/Collection/Chart.hs
module Criterion.Collection.Chart
( errBarChart
, defaultColors
) where
import Criterion.Measurement
import Data.Accessor
import Data.Colour
import Data.Colour.Names
import Graphics.Rendering.Chart hiding (Vector)
import Criterion.Collection.Sample
defaultColors :: [AlphaColour Double]
defaultColors = cycle $ map opaque [
blue,
red,
brown,
black,
darkgoldenrod,
coral,
cyan,
darkcyan,
darkkhaki,
darkmagenta,
darkslategrey
]
plotErrBars :: String
-> CairoLineStyle
-> [SampleData]
-> Plot Double Double
plotErrBars name lineStyle samples = toPlot plot
where
value sd = symErrPoint size m 0 s
where
size = fromIntegral $ sdInputSize sd
(m,s) = computeMeanAndStddev sd
plot = plot_errbars_values ^= map value samples
$ plot_errbars_line_style ^= lineStyle
$ plot_errbars_title ^= name
$ defaultPlotErrBars
plotPoints :: String
-> CairoPointStyle
-> [SampleData]
-> Plot Double Double
plotPoints name pointStyle samples = toPlot plot
where
value sd = (fromIntegral size, m)
where
size = sdInputSize sd
(m,_) = computeMeanAndStddev sd
plot = plot_points_values ^= map value samples
$ plot_points_style ^= pointStyle
$ plot_points_title ^= name
$ defaultPlotPoints
errBarChart :: Bool
-> Double
-> String
-> [(AlphaColour Double, String, [SampleData])]
-> Renderable ()
errBarChart logPlot lineWidth plotTitle plotData = toRenderable layout
where
mkPlot (colour, plotName, samples) = joinPlot eb pts
where
lStyle = line_width ^= lineWidth
$ line_color ^= colour
$ defaultPlotErrBars ^. plot_errbars_line_style
pStyle = filledCircles (1.5 * lineWidth) colour
eb = plotErrBars plotName lStyle samples
pts = plotPoints plotName pStyle samples
remapLabels = axis_labels ^: f
where
f labels = map (map g) labels
g (x,_) = (x, secs x)
axisfn = if logPlot
then autoScaledLogAxis defaultLogAxis
else autoScaledAxis defaultLinearAxis
layout = layout1_title ^= plotTitle
$ layout1_background ^= solidFillStyle (opaque white)
$ layout1_left_axis ^: laxis_generate ^= axisfn
$ layout1_left_axis ^: laxis_override ^= remapLabels
$ layout1_left_axis ^: laxis_title ^= "Time (seconds)"
$ layout1_bottom_axis ^: laxis_generate ^= axisfn
$ layout1_bottom_axis ^: laxis_title ^= "# of items in collection"
$ layout1_plots ^= (map (Left . mkPlot) plotData)
$ defaultLayout1