module Chart(barChart) where import SlideWare --barChart :: (Num a, Ord a) => (String, String) -> [(String, a)] -> Pict barChart (xLbl, yLbl) xys = let n = fromIntegral (length xys) h = clientH / 3 w = clientW / 2 / n my = maximum [ y | (x,y) <- xys ] ps = zipWith bar xys (cycle colors) p = hbAppend (spacing (2*gapSize) : lbar1 : lbar2 : ps ++ [rbar]) lbar1 = join (label "__barL1" $ blank 0 h) (t " ") lbar2 = label "__barL2" $ join (blank 0 h) (t " ") rbar = join (label "__barR" $ blank 0 h) (t " ") bar (x, y) c = join (colorize c $ fill $ blank w (y / my * h)) (t x) join a b = vcAppend [spacing gapSize, a, b] lt2 = findLT ("__barL2") p lb1 = findLB ("__barL1") p lb2 = findLB ("__barL2") p rb = findRB ("__barR") p xarr = lineWidth 2 $ arrow (lb1, rb) yarr = lineWidth 2 $ arrow (lb2, lt2) ch = launderPrefix "__bar" $ ltSuperimpose [p, xarr, yarr] yLbl' = yLbl ++ " (max " ++ show my ++ ")" in vlAppend [t yLbl', hbAppend [ch, t xLbl]] colors = ["red", "yellow", "green", "cyan", "blue", "magenta"]