chart: show top 10 (or --items N) accounts, sorted by amount
This commit is contained in:
parent
71c6b13717
commit
160f8dc5b8
@ -23,6 +23,7 @@ import Data.Colour.RGBSpace
|
||||
import Data.Colour.RGBSpace.HSL (hsl)
|
||||
import Data.Colour.SRGB.Linear (rgb)
|
||||
import Data.List
|
||||
import Safe (readDef)
|
||||
|
||||
-- | Generate an image with the pie chart and write it to a file
|
||||
chart :: [Opt] -> [String] -> Ledger -> IO ()
|
||||
@ -56,9 +57,13 @@ genPie opts filterspec l = defaultPieLayout
|
||||
where
|
||||
pie_chart = defaultPieChart { pie_data_ = items, pie_colors_ = mkColours}
|
||||
items = mapMaybe (uncurry accountPieItem) $
|
||||
flatten $
|
||||
top num $
|
||||
balances $
|
||||
ledgerAccountTree (fromMaybe 99999 $ depthFromOpts opts) $ cacheLedger'' filterspec l
|
||||
top n t = topn ++ [other]
|
||||
where (topn,rest) = splitAt n $ reverse $ sortBy (comparing snd) $ flatten t
|
||||
other = ("other", sum $ map snd rest)
|
||||
num = readDef 10 (getOption opts ChartItems "10")
|
||||
|
||||
-- | Convert all quantities of MixedAccount to a single commodity
|
||||
amountValue :: MixedAmount -> Double
|
||||
|
||||
@ -86,6 +86,7 @@ options = [
|
||||
,Option "" ["debug-no-ui"] (NoArg DebugNoUI) "run ui commands with no output"
|
||||
#ifdef CHART
|
||||
,Option "o" ["output"] (ReqArg ChartOutput "FILE") "chart: output filename (default: hledger.png)"
|
||||
,Option "" ["items"] (ReqArg ChartItems "N") "chart: number of accounts to show (default: 10)"
|
||||
,Option "" ["size"] (ReqArg ChartSize "WIDTHxHEIGHT") "chart: image size (default: 1024x1024)"
|
||||
#endif
|
||||
]
|
||||
@ -118,6 +119,7 @@ data Opt =
|
||||
| DebugNoUI
|
||||
#ifdef CHART
|
||||
| ChartOutput {value::String}
|
||||
| ChartItems {value::String}
|
||||
| ChartSize {value::String}
|
||||
#endif
|
||||
deriving (Show,Eq)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user