module Graphics.Rendering.HPlot.Bars where
import qualified Data.Foldable as F
import Graphics.Rendering.Chart
import Control.Lens
import Data.Default
import Graphics.Rendering.HPlot.Types
import Graphics.Rendering.HPlot.Utils
import Data.List
import Data.Maybe
bars ∷ F.Foldable f ⇒ BarOption → (Maybe (f Double), [f Double]) → EitherPlot
bars opt (x, ys) | isNothing x = Left $ toPlot' $ addIndexes ys'
| otherwise = Right $ toPlot' $ zip (F.toList $ fromJust x) ys'
where
toPlot' x_y = plotBars $ plot_bars_values .~ x_y
$ plot_bars_style .~ opt^.style
$ plot_bars_titles .~ opt^.legend
$ plot_bars_item_styles .~ fmap (\c → (FillStyleSolid $ mkColor c (opt^.opacity), Just def)) (cycle (opt^.cols))
$ plot_bars_spacing .~ BarsFixGap (opt^.space) 0
$ plot_bars_alignment .~ opt^.align
$ def
ys' = transpose $ fmap F.toList ys