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.RGBSpace.HSL (hsl)
|
||||||
import Data.Colour.SRGB.Linear (rgb)
|
import Data.Colour.SRGB.Linear (rgb)
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Safe (readDef)
|
||||||
|
|
||||||
-- | Generate an image with the pie chart and write it to a file
|
-- | Generate an image with the pie chart and write it to a file
|
||||||
chart :: [Opt] -> [String] -> Ledger -> IO ()
|
chart :: [Opt] -> [String] -> Ledger -> IO ()
|
||||||
@ -56,9 +57,13 @@ genPie opts filterspec l = defaultPieLayout
|
|||||||
where
|
where
|
||||||
pie_chart = defaultPieChart { pie_data_ = items, pie_colors_ = mkColours}
|
pie_chart = defaultPieChart { pie_data_ = items, pie_colors_ = mkColours}
|
||||||
items = mapMaybe (uncurry accountPieItem) $
|
items = mapMaybe (uncurry accountPieItem) $
|
||||||
flatten $
|
top num $
|
||||||
balances $
|
balances $
|
||||||
ledgerAccountTree (fromMaybe 99999 $ depthFromOpts opts) $ cacheLedger'' filterspec l
|
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
|
-- | Convert all quantities of MixedAccount to a single commodity
|
||||||
amountValue :: MixedAmount -> Double
|
amountValue :: MixedAmount -> Double
|
||||||
|
|||||||
@ -86,6 +86,7 @@ options = [
|
|||||||
,Option "" ["debug-no-ui"] (NoArg DebugNoUI) "run ui commands with no output"
|
,Option "" ["debug-no-ui"] (NoArg DebugNoUI) "run ui commands with no output"
|
||||||
#ifdef CHART
|
#ifdef CHART
|
||||||
,Option "o" ["output"] (ReqArg ChartOutput "FILE") "chart: output filename (default: hledger.png)"
|
,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)"
|
,Option "" ["size"] (ReqArg ChartSize "WIDTHxHEIGHT") "chart: image size (default: 1024x1024)"
|
||||||
#endif
|
#endif
|
||||||
]
|
]
|
||||||
@ -118,6 +119,7 @@ data Opt =
|
|||||||
| DebugNoUI
|
| DebugNoUI
|
||||||
#ifdef CHART
|
#ifdef CHART
|
||||||
| ChartOutput {value::String}
|
| ChartOutput {value::String}
|
||||||
|
| ChartItems {value::String}
|
||||||
| ChartSize {value::String}
|
| ChartSize {value::String}
|
||||||
#endif
|
#endif
|
||||||
deriving (Show,Eq)
|
deriving (Show,Eq)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user