2012-04-23 3 views
1

日付/タイムスタンプ、応答時間、メッセージサイズの3つのIncanterデータセットがあります。私がしたいのは、x軸の日付/タイムスタンプとy軸の応答時間を持つ散布図を作成することです。範囲の値に基づいてIncanterシリーズを作成する方法

これは簡単ですが、メッセージサイズの列に基づいて別の一連のデータを生成したいと考えています。 Incanterのscatter-plot関数は:group-byオプションをとりますが、離散値のみを扱うようです。私は、メッセージサイズの列にいくつかの関数を適用して、系列を生成したいと思います。いくつかの機能は次のようなものです:

(fn [n] 
    (cond 
    (< n 5000)     "small" 
    (and (>= n 5000) (< n 20000)) "medium" 
    (>= n 20000)     "large")) 

これは可能ですか、同じことを達成する良い方法がありますか?

答えて

2

あなたは

(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を使用し、その後追加....、このような何かを、あなたの関数を使用して計算離散値を持つ新しい列をデータセットを合成することができます。

incanter plot

..

(with-data dataset2 
    (view 
     (scatter-plot 
     :x 
     :y 
     :group-by :size))) 

はこのような何かを与えるために、

(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]))))) 

プロットこのような:

sum plot

二つのカラムからグループごとに生成

変異

関連する問題