首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据一系列值创建Incanter系列

如何根据一系列值创建Incanter系列
EN

Stack Overflow用户
提问于 2012-04-24 07:48:56
回答 1查看 756关注 0票数 1

我有一个包含3列的Incanter数据集:日期/时间戳、响应时间和消息大小。我想做的是用x轴上的日期/时间戳和y轴上的响应时间创建散点图。

这很简单,但我想根据消息大小列生成单独的数据序列。Incanter的scatter-plot函数接受:group-by选项,但它似乎只处理离散值。我希望通过对消息大小列应用一些函数来生成序列。一些函数如下:

代码语言:javascript
复制
(fn [n]
  (cond
    (< n 5000)                    "small"
    (and (>= n 5000) (< n 20000)) "medium"
    (>= n 20000)                  "large"))

这是可能的,还是有更好的方法来完成同样的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-24 08:45:21

您可以使用使用您的函数计算的离散值来合成具有新列的数据集,如下所示……

代码语言:javascript
复制
(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 ...

代码语言:javascript
复制
(with-data dataset2 
   (view 
      (scatter-plot 
       :x 
       :y 
       :group-by :size )))

给出这样的东西:

从两列生成group-by的变体:

代码语言:javascript
复制
 (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])))))

它的图如下:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10289897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档