Skip to content

Commit

Permalink
Added data-table function, changed set-data to a multi-method, and cr…
Browse files Browse the repository at this point in the history
…eated a method for JTables.
  • Loading branch information
liebke committed Mar 26, 2010
1 parent 20ae87d commit 42214c6
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 4 deletions.
8 changes: 5 additions & 3 deletions modules/incanter-charts/src/main/clojure/incanter/charts.clj
Expand Up @@ -29,7 +29,8 @@
incanter.charts
;(:gen-class)
(:use [incanter.core :only ($ matrix? to-list plus minus div group-by
bind-columns view save $group-by conj-cols grid-apply)]
bind-columns view save $group-by conj-cols
grid-apply set-data)]
[incanter.stats :only (quantile quantile-normal cumulative-mean sd)])
(:import (java.io File)
(javax.imageio ImageIO)
Expand Down Expand Up @@ -2113,8 +2114,9 @@
(.getDataset series-idx)
.getSeries)))))

(defn set-data
"set-data"


(defmethod set-data org.jfree.chart.JFreeChart
([chart data]
(set-data chart data 0))
([chart data series-idx]
Expand Down
61 changes: 60 additions & 1 deletion modules/incanter-core/src/main/clojure/incanter/core.clj
Expand Up @@ -2294,7 +2294,7 @@
(view (to-matrix (get-dataset :iris) :dummies true))
;; view a chart
(view (histogram (sample-normal 1000)))
(view (histogram (sample-normal 1000)) :width 700 :height 700)
;; view a URL
(view \"http://incanter.org\")
Expand Down Expand Up @@ -2362,6 +2362,14 @@



(defmethod view javax.swing.JTable
([obj & options]
(doto (javax.swing.JFrame. "Incanter Dataset")
(.add (javax.swing.JScrollPane. obj))
(.setSize 500 600)
(.setVisible true))))



;; URL view method code lifted from clojure.contrib.javadoc.browse/open-url-in-browser
(defmethod view String
Expand All @@ -2375,6 +2383,57 @@




(defn data-table
"Creates a javax.swing.JTable given an Incanter dataset."
([data]
(let [col-names (:column-names data)
column-vals (map (fn [row] (map #(row %) col-names)) (:rows data))
table-model (javax.swing.table.DefaultTableModel. (java.util.Vector. (map #(java.util.Vector. %) column-vals))
(java.util.Vector. col-names))]

(javax.swing.JTable. table-model))))



(defmulti set-data
"
Examples:
(use '(incanter core charts datasets))
(def data (get-dataset :iris))
(def table (data-table data))
(view table)
;; now view only a subset of the data
(set-data table ($where {:Petal.Length {:gt 6}} data))
;; use sliders to dynamically select the query values
(let [data (get-dataset :iris)
table (data-table data)]
(view table)
(sliders [species [\"setosa\" \"virginica\" \"versicolor\"]
min-petal-length (range 0 8 0.1)]
(set-data table ($where {:Species species
:Petal.Length {:gt min-petal-length}}
data))))
"
(fn [obj data] (type obj)))


(defmethod set-data javax.swing.JTable
([table data]
(let [col-names (:column-names data)
column-vals (map (fn [row] (map #(row %) col-names)) (:rows data))
table-model (javax.swing.table.DefaultTableModel. (java.util.Vector. (map #(java.util.Vector. %) column-vals))
(java.util.Vector. col-names))]
(.setModel table table-model))))



(defn quit
" Exits the Clojure shell."
([] (System/exit 0)))
Expand Down

0 comments on commit 42214c6

Please sign in to comment.