2
我想在全局條(col-k)中保持順序的同時排序堆棧元素(group-by-k)。在Incanter中爲堆積條形圖排序多列
$ order函數不允許一次排列多個列。所以函數兩次,但最後一次不會保留以前的排序。所以我可以有全球酒吧排序,或者酒吧的堆疊元素,但不是兩個!
我該如何做到這一點?我懷疑我們需要一個sorted-map
在$fn
內工作,但不知道如何實現這個...
這裏我寫的函數嘗試多次排序。
(require
(incanter '[core :as core]
'[charts :as charts])
(defn sorted-barchart [data col-k & {:keys [group-by-k
order-k
order-sign
order-group-k
order-group-sign
title
x-label
y-label
legend]}]
(core/with-data
(let [d (core/to-dataset data)
d1 (core/$where {group-by-k {:$fn #(not (empty? %))}} d)
d2 (core/$where {col-k {:$fn #(not (empty? %))}} d1)
d3 (core/$rollup :count :counts (if group-by-k [col-k group-by-k] [col-k]) d2)
d4 (core/$order (or order-k col-k) (or order-sign nil) d3)
d5 (core/$order (or order-group-k group-by-k)
(or order-group-sign nil) d4)]
d5)
(let [chart (charts/stacked-bar-chart col-k :counts
:group-by group-by-k
:vertical false
:x-label (or x-label " ")
:y-label (or y-label " ")
:title (or title " ")
:legend (or legend true)
:series-label "Total")]
chart)))
編輯:這實際上工作時,由col-k和group-by-k排序。但是當你想首先按計數進行排序時,當你想要對堆棧元素進行排序時,通過計數進行排序時,保留col-k順序也會變得更加複雜。