我有一个包含3列的Incanter数据集:日期/时间戳、响应时间和消息大小。我想做的是用x轴上的日期/时间戳和y轴上的响应时间创建散点图。
这很简单,但我想根据消息大小列生成单独的数据序列。Incanter的scatter-plot函数接受:group-by选项,但它似乎只处理离散值。我希望通过对消息大小列应用一些函数来生成序列。一些函数如下:
(fn [n]
(cond
(< n 5000) "small"
(and (>= n 5000) (< n 20000)) "medium"
(>= n 20000) "large"))这是可能的,还是有更好的方法来完成同样的事情?
发布于 2012-04-24 08:45:21
您可以使用使用您的函数计算的离散值来合成具有新列的数据集,如下所示……
(def dataset1 (dataset
[:x :y]
(for [x (range 10) y (range 10)] [x y])))
;=> #'user/dataset1
dataset1
[:x :y]
[0 0]
[0 1]
...
[9 8]
[9 9]
(def dataset2 (with-data dataset1
(conj-cols $data
(dataset [:size] ($map #(cond
(< % 3) "small"
(<= 3 % 6) "medium"
(< 6 %) "large") :x)))))
;=> #'user/dataset2
dataset2
[:x :y :size]
[0 0 "small"]
[0 1 "small"]
...
[9 8 "large"]
[9 9 "large"]在您生成的离散值上添加然后使用:group-by ...
(with-data dataset2
(view
(scatter-plot
:x
:y
:group-by :size )))给出这样的东西:

从两列生成group-by的变体:
(def dataset3
(with-data dataset1
(conj-cols
$data
(dataset [:size] ($map #(let [sum (+ % %2)]
(cond
(< sum 4 ) "small"
(<= 4 sum 12) "medium"
(> 12 sum ) "large")) [:x :y])))))它的图如下:

https://stackoverflow.com/questions/10289897
复制相似问题