From 976ec8254ab9a1d9d3208a5b61e8d8c324f2e0fe Mon Sep 17 00:00:00 2001 From: awb99 Date: Sat, 23 Nov 2024 14:20:18 -0500 Subject: [PATCH] docy snippets added --- .gitignore | 3 +- README.md | 3 +- .../notebook/highchart_barcolor/notebook.edn | 26 ++++----- demo/deps.edn | 3 +- demo/resources/demo-config.edn | 25 ++++++++- demo/resources/demo-services.edn | 7 +++ demo/src/demo/page/core.cljs | 7 +-- demo/src/demo/reval_experiment.clj | 31 +++++++++++ resources/docy/dali-cheetah.md | 4 -- .../docy/dali-helin-canvas.md | 0 src/rtable/format/format_date.cljs | 23 ++++++++ src/rtable/format/format_number.cljs | 18 ++++++ src/rtable/plot/cheetah.clj | 10 ++-- src/rtable/plot/echarts.clj | 8 ++- src/rtable/plot/highcharts.clj | 14 +++-- src/rtable/plot/pixi.clj | 10 ++-- src/rtable/plot/vega.clj | 14 +++-- src/rtable/snippet/agtable.clj | 37 +++++++++++++ src/rtable/snippet/agtable_unicode.clj | 36 ++++++++++++ src/rtable/snippet/data/random_bars.clj | 44 +++++++++++++++ src/rtable/snippet/data/random_series.clj | 55 +++++++++++++++++++ src/rtable/snippet/highstock.clj | 18 ++++++ src/rtable/snippet/rtable.clj | 15 +++++ 23 files changed, 364 insertions(+), 47 deletions(-) create mode 100644 demo/src/demo/reval_experiment.clj rename CANVAS.md => resources/docy/dali-helin-canvas.md (100%) create mode 100644 src/rtable/format/format_date.cljs create mode 100644 src/rtable/format/format_number.cljs create mode 100644 src/rtable/snippet/agtable.clj create mode 100644 src/rtable/snippet/agtable_unicode.clj create mode 100644 src/rtable/snippet/data/random_bars.clj create mode 100644 src/rtable/snippet/data/random_series.clj create mode 100644 src/rtable/snippet/highstock.clj create mode 100644 src/rtable/snippet/rtable.clj diff --git a/.gitignore b/.gitignore index 3aff947..a386533 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,5 @@ package-lock.json shadow-cljs.edn goldly_bindings_generated.cljs resources/META-INF -.data \ No newline at end of file +.data +demo/.reval/ \ No newline at end of file diff --git a/README.md b/README.md index a321256..a8af645 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,9 @@ - as a techml dataset (which gets loaded via transit-json encoding) - under the hood it uses - ag-grid - - highcharts.js - cheetah grid + - highcharts.js + - vega charts - it also implements its own - table renderer and - pixijs based canvas chart renderer. diff --git a/demo/.reval/public/rdocument/demo/notebook/highchart_barcolor/notebook.edn b/demo/.reval/public/rdocument/demo/notebook/highchart_barcolor/notebook.edn index bf592a2..5fafb81 100644 --- a/demo/.reval/public/rdocument/demo/notebook/highchart_barcolor/notebook.edn +++ b/demo/.reval/public/rdocument/demo/notebook/highchart_barcolor/notebook.edn @@ -1,6 +1,6 @@ -; saved on 2024-11-22 15:42:11 +; saved on 2024-11-22 16:13:42 {:content [{:out "", - :id :b0e15f3e-f1be-489a-9595-7ed0f4ed5492, + :id :733e23b3-b1c7-41c2-aded-ba796dc990f5, :code "(ns demo.notebook.highchart-barcolor\n (:require\n [tablecloth.api :as tc]\n [rtable.plot :as plot]\n [demo.random-bars :refer [random-bar-ds]]\n [demo.env :refer [env]]))", :ns "demo.notebook.highchart-barcolor", :result ^{:dali true} @@ -9,7 +9,7 @@ {:style {:color "grey"}} "nil"]}} {:out "", - :id :e6d1c1ae-7e1e-4a3e-b279-d7641b6fe243, + :id :ea0fe39e-6a61-4875-baa5-4ce4f75539e7, :code "(def ds\n (random-bar-ds 30))", :ns "demo.notebook.highchart-barcolor", :result ^{:dali true} @@ -18,7 +18,7 @@ {:style {:color "deeppink"}} "#'demo.notebook.highchart-barcolor/ds"]}} {:out "", - :id :b735448a-3cb9-437a-b95b-3e173c966944, + :id :d2844fe3-2472-46c0-b01f-80c89184a67a, :code "(def ds-signal \n (tc/add-column ds \n :signal \n (map (fn [p] \n (if (> (rand-int 100) 90 )\n true\n false)) (:close ds))))", :ns "demo.notebook.highchart-barcolor", :result ^{:dali true} @@ -26,8 +26,8 @@ :data [:span {:style {:color "deeppink"}} "#'demo.notebook.highchart-barcolor/ds-signal"]}} - {:out "2024-11-22T20:42:11.805139496Z INFO LOG nuc12 dali.store.file(23,7) - writing .data/public/dali/yBAGa.transit-json\n", - :id :fbbbf899-70b2-4a1e-9eff-914959c005c5, + {:out "2024-11-22T21:13:41.943592325Z INFO LOG nuc12 dali.store.file(23,7) - writing .data/public/dali/iEO4U.transit-json\n", + :id :60a2f59b-364d-466f-85ce-eda9a4adaacc, :code "(plot/highstock-ds\n env {:style {:width \"600px\"\n :height \"300px\"}\n :charts [{:bar {:type :ohlc\n :mode :candle\n :barcolor {:column :signal\n :color {true \"green-5\"}\n }\n }}\n {:volume :column}]}\n ds-signal)", :ns "demo.notebook.highchart-barcolor", :result ^{:dali true} @@ -41,19 +41,19 @@ :barcolor {:column :signal, :color {true "green-5"}}}} {:volume :column}], - :load {:id "yBAGa", - :url "/r/dali/yBAGa.transit-json", - :filename "yBAGa.transit-json", + :load {:id "iEO4U", + :url "/r/dali/iEO4U.transit-json", + :filename "iEO4U.transit-json", :fmt "transit-json"}}}} {:out "", - :id :08c986bd-4db7-4e44-80f7-7fcacf8f0d4c, + :id :7fb556c2-7638-40bc-96f8-ef10673ec30c, :code ";ds-signal\n\n(tc/select-rows ds-signal #(:signal %))", :ns "demo.notebook.highchart-barcolor", :result ^{:dali true} {:viewer-fn dali.viewer.text/text, - :data {:text "_unnamed [2 7]:\n\n| :date | :close | :open | :high | :low | :volume | :signal |\n|-----------------------------|-------------:|-------------:|-------------:|-------------:|---------------:|---------|\n| 2024-10-25T20:42:11.800319Z | 100.03358941 | 100.36587999 | 101.38420713 | 99.38671147 | 92996.90611692 | true |\n| 2024-11-12T20:42:11.800285Z | 102.07740565 | 101.72813023 | 103.21929602 | 101.27371811 | 65394.03152824 | true |\n"}}}], - :meta {:id :9c281118-4924-4917-aea6-bec3691514a5, - :eval-time "2024-11-22T20:42:11.811915254Z", + :data {:text "_unnamed [3 7]:\n\n| :date | :close | :open | :high | :low | :volume | :signal |\n|-----------------------------|-------------:|-------------:|-------------:|-------------:|---------------:|---------|\n| 2024-10-25T21:13:41.924274Z | 99.89753558 | 100.00350906 | 101.26201808 | 98.89499821 | 24610.24185409 | true |\n| 2024-10-29T21:13:41.924266Z | 99.93237554 | 99.55315775 | 101.30158904 | 98.70680411 | 52770.18911772 | true |\n| 2024-11-01T21:13:41.924261Z | 100.84055245 | 100.65342290 | 101.63422997 | 100.06887770 | 66598.30845784 | true |\n"}}}], + :meta {:id :b706c276-040e-4f4f-9561-b62fefb01e4f, + :eval-time "2024-11-22T21:13:42.006656278Z", :ns "demo.notebook.highchart-barcolor", :java "19.0.2", :clojure "1.11.1"}} diff --git a/demo/deps.edn b/demo/deps.edn index bb39b06..e6307ba 100644 --- a/demo/deps.edn +++ b/demo/deps.edn @@ -9,7 +9,8 @@ org.pinkgorilla/clj-service {:mvn/version "0.3.20"} org.pinkgorilla/webly {:mvn/version "0.7.703"} ; build tool org.pinkgorilla/goldly {:mvn/version "0.7.684"} - org.pinkgorilla/reval {:mvn/version "0.9.171"} + org.pinkgorilla/reval {:mvn/version "0.9.176"} + org.pinkgorilla/docy {:mvn/version "0.0.10"} ; org.pinkgorilla/ui-tailwind {:mvn/version "0.1.8"} ; tailwind css classes org.pinkgorilla/ui-site {:mvn/version "0.0.31"} ; site-menu, ipsum diff --git a/demo/resources/demo-config.edn b/demo/resources/demo-config.edn index 4b392e8..436d8e8 100644 --- a/demo/resources/demo-config.edn +++ b/demo/resources/demo-config.edn @@ -4,7 +4,30 @@ :demo {:clj "demo/notebook/" ; embedded notebooks in jars. :cljs "demo/notebook/"}}} - + :docy {:namespaces [rtable.plot] + :snippets + [;; PLOT + ;; Symbols generated via potempkin do not work, we need to + ;; use the underlying real function. + {:ns "rtable.snippet.highstock" + :kernel :clj + :label "highstock simple" + :fns ["rtable.plot.highcharts/highstock-ds"]} + {:ns "rtable.snippet.rtable" + :kernel :clj + :label "rtable simple" + :fns ["rtable.plot.rtable/rtable-ds"]} + {:ns "rtable.snippet.agtable" + :kernel :clj + :label "agtable simple" + :fns ["rtable.plot.aggrid/aggrid-ds"]} + {:ns "rtable.snippet.agtable-unicode" + :kernel :clj + :label "agtable unicode" + :fns ["rtable.plot.aggrid/aggrid-ds"]} + + ]} + } \ No newline at end of file diff --git a/demo/resources/demo-services.edn b/demo/resources/demo-services.edn index 74e4756..510a5d7 100644 --- a/demo/resources/demo-services.edn +++ b/demo/resources/demo-services.edn @@ -15,6 +15,13 @@ (clip/ref :permission) (clip/ref :exts))} + :docy {:start (docy.core/start-docy + {:exts (clip/ref :exts) + :clj (clip/ref :clj-service) + :role nil + :namespaces (:namespaces (:docy (deref (clip/ref :config)))) + :snippets (:snippets (:docy (deref (clip/ref :config))))})} + :reval {:start (reval.core/start-reval (merge {:clj (clip/ref :clj-service) diff --git a/demo/src/demo/page/core.cljs b/demo/src/demo/page/core.cljs index 2450a68..a249f9c 100644 --- a/demo/src/demo/page/core.cljs +++ b/demo/src/demo/page/core.cljs @@ -2,14 +2,12 @@ (:require [re-frame.core :as rf])) - (defn item [text page] [:div {:class "hover:bg-blue-400 border rounded cursor-pointer w-64 bg-blue-200 m-5" :on-click #(rf/dispatch [:bidi/goto page :query-params {}])} text]) - (defn page [_] [:div.h-screen.w-screen.bg-blue-100 [:grid.grid-cols-2.grid-flow-row.w-full-h-full @@ -28,8 +26,7 @@ [item "layout" 'demo.page.layout/page] [item "layout-viewer" 'demo.page.layout-viewer/page] - - - + ; docy + [item "docy" 'docy.page/docy-page] ]]) diff --git a/demo/src/demo/reval_experiment.clj b/demo/src/demo/reval_experiment.clj new file mode 100644 index 0000000..cdcee7a --- /dev/null +++ b/demo/src/demo/reval_experiment.clj @@ -0,0 +1,31 @@ +(ns demo.reval-experiment + (:require + [modular.system] + [reval.dali.eval :refer [dali-eval-blocking]])) + + +(def s (modular.system/system :reval)) + +s + +(dali-eval-blocking + s + {:kernel :clj + :code "(ns rtable.snippet.rtable + (:require + [rtable.plot :as plot] + [rtable.snippet.data.random-bars :refer [random-bar-ds]])) + +(def ds (random-bar-ds 200)) + +(plot/rtable {:class \"table-head-fixed padding-sm table-red table-striped table-hover\" + :style {:width \"50vw\" + :height \"40vh\" + :border \"3px solid green\"} + :columns [{:path :date :format 'ta.viz.lib.format-date/dt-yyyymmdd-hhmm :max-width \"80px\"} + {:path :close :format 'ta.viz.lib.format-number/fmt-nodigits} + {:path :volume}]} + ds)"}) + + + diff --git a/resources/docy/dali-cheetah.md b/resources/docy/dali-cheetah.md index 03d430c..bc04db3 100644 --- a/resources/docy/dali-cheetah.md +++ b/resources/docy/dali-cheetah.md @@ -23,7 +23,3 @@ ListGrid({ - todo - - rtable plot in reagent-table. - - highcharts gets the data how? - - move in vega? \ No newline at end of file diff --git a/CANVAS.md b/resources/docy/dali-helin-canvas.md similarity index 100% rename from CANVAS.md rename to resources/docy/dali-helin-canvas.md diff --git a/src/rtable/format/format_date.cljs b/src/rtable/format/format_date.cljs new file mode 100644 index 0000000..eb4d443 --- /dev/null +++ b/src/rtable/format/format_date.cljs @@ -0,0 +1,23 @@ +(ns rtable.format.format-date + (:require + [tick.helper :refer [dt-format]])) + +(defn dt-yyyymmdd [dt] + ;(println "dt-yyyymmdd: " dt) + (if (nil? dt) + "" + (if (string? dt) + dt + (dt-format "YYYY-MM-dd" dt) + ;(str dt) + ))) + +(defn dt-yyyymmdd-hhmm [dt] + ;(println "dt-yyyymmdd: " dt) + (if (nil? dt) + "" + (if (string? dt) + dt + (dt-format "YYYY-MM-dd HH:mm" dt) + ;(str dt) + ))) \ No newline at end of file diff --git a/src/rtable/format/format_number.cljs b/src/rtable/format/format_number.cljs new file mode 100644 index 0000000..2f3e03c --- /dev/null +++ b/src/rtable/format/format_number.cljs @@ -0,0 +1,18 @@ +(ns rtable.format.format-number + (:require + [pinkgorilla.goog.string :refer [format]])) + +(defn format-number [sformat nr] + ;(println "fmt-nodigits nr: " nr) + ;;(js/isNaN nr) + ;(= nr ##NaN) + ;(to-fixed nr 1) + (if (nil? nr) + "-" + (if (string? nr) + nr + (format "%.0f" nr)))) + +(defn fmt-nodigits [nr] + (format-number "%.0f" nr)) + diff --git a/src/rtable/plot/cheetah.clj b/src/rtable/plot/cheetah.clj index 6d8f932..ef58229 100644 --- a/src/rtable/plot/cheetah.clj +++ b/src/rtable/plot/cheetah.clj @@ -4,10 +4,12 @@ [dali.store.file.transit] ; side effects [dali.store :refer [write]])) -(defn cheetah-ds [{:keys [dali-store]} - {:keys [style class columns] - :or {style {:width "100%" :height "100%"} - class ""}} ds] +(defn cheetah-ds + "plot techml dataset via cheetah grid" + [{:keys [dali-store]} + {:keys [style class columns] + :or {style {:width "100%" :height "100%"} + class ""}} ds] (create-dali-spec {:viewer-fn 'rtable.viewer.cheetah/cheetah-ds :transform-fn 'rtable.transform.cheetah/load-and-transform-cheetah diff --git a/src/rtable/plot/echarts.clj b/src/rtable/plot/echarts.clj index 3cfac4d..7baee1f 100644 --- a/src/rtable/plot/echarts.clj +++ b/src/rtable/plot/echarts.clj @@ -6,9 +6,11 @@ [dali.spec :refer [create-dali-spec]] [dali.plot.anomaly :as plot])) -(defn echarts [{:keys [style class data] - :or {style {:width "100%" :height "100%"}} - :as opts}] +(defn echarts + "plot data via echats" + [{:keys [style class data] + :or {style {:width "100%" :height "100%"}} + :as opts}] (create-dali-spec {:viewer-fn 'rtable.viewer.echarts/echarts :data {:style style diff --git a/src/rtable/plot/highcharts.clj b/src/rtable/plot/highcharts.clj index dc6cf4f..3d4fe5c 100644 --- a/src/rtable/plot/highcharts.clj +++ b/src/rtable/plot/highcharts.clj @@ -23,11 +23,15 @@ ;(dtype/clone) (map instant->epoch-ms)))) -(defn highstock-ds [{:keys [dali-store]} - {:keys [style class charts] - :or {style {:width "100%" :height "100%"} - class ""}} - ds] +(defn highstock-ds + "plot using highcharts.js/highstock from a techml dataset. + :style and :class apply to the wrapper + charts is our chart-spec spec format." + [{:keys [dali-store]} + {:keys [style class charts] + :or {style {:width "100%" :height "100%"} + class ""}} + ds] (create-dali-spec {:viewer-fn 'rtable.viewer.highcharts/highstock :transform-fn 'rtable.transform.highcharts/load-and-transform-highcharts diff --git a/src/rtable/plot/pixi.clj b/src/rtable/plot/pixi.clj index 575567a..86a549d 100644 --- a/src/rtable/plot/pixi.clj +++ b/src/rtable/plot/pixi.clj @@ -4,10 +4,12 @@ [dali.store.file.transit] ; side effects [dali.store :refer [write]])) -(defn pixi-ds [{:keys [dali-store]} - {:keys [style class charts] - :or {style {:width "100%" :height "100%"} - class ""}} ds] +(defn pixi-ds + "plot techml dataset via pixi.js chart renderer" + [{:keys [dali-store]} + {:keys [style class charts] + :or {style {:width "100%" :height "100%"} + class ""}} ds] (create-dali-spec {:viewer-fn 'rtable.viewer.pixi/pixi :transform-fn 'rtable.transform.pixi/load-and-transform-pixi diff --git a/src/rtable/plot/vega.clj b/src/rtable/plot/vega.clj index 66a58f3..3205f1a 100644 --- a/src/rtable/plot/vega.clj +++ b/src/rtable/plot/vega.clj @@ -24,7 +24,9 @@ (tds/mapseq-reader) (into []))) -(defn vegalite-ds [{:keys [dali-store]} {:keys [style cols spec] :as opts} ds] +(defn vegalite-ds + "plot techml dataset via vega/vega-lite" + [{:keys [dali-store]} {:keys [style cols spec] :as opts} ds] (create-dali-spec {:viewer-fn 'rtable.viewer.vega/vegalite :data (merge @@ -32,10 +34,12 @@ {:style style :spec (assoc spec :data {:values (convert-data ds cols)})})})) -(defn vega [{:keys [dali-store]} - {:keys [style] - :or {style {:width "100%" :height "100%"}} - :as opts} data] +(defn vega + "plot techml dataset via vega/vega" + [{:keys [dali-store]} + {:keys [style] + :or {style {:width "100%" :height "100%"}} + :as opts} data] (create-dali-spec {:viewer-fn 'rtable.viewer.vega/vega :data (merge diff --git a/src/rtable/snippet/agtable.clj b/src/rtable/snippet/agtable.clj new file mode 100644 index 0000000..84e64fd --- /dev/null +++ b/src/rtable/snippet/agtable.clj @@ -0,0 +1,37 @@ +(ns rtable.snippet.agtable + (:require + [reval.core :refer [*env*]] + [rtable.plot :as plot] + [rtable.snippet.data.random-bars :refer [random-bar-ds]])) + +(def ds (random-bar-ds 200)) + +(def opts + {:style {;:width "800px" :height "600px" + :width "800px" :height "600px" + ;:width "100%" :height "100%" + } + :timezone "America/Panama" + :columns [{:field :date} + {:field :open + :cellStyle {:color "red" :background-color "green"} + :resizable true} + {:field :high + :type "rightAligned" + :resizable true + ;:valueGetter: p => p.data.athlete + ; A Value Getter is a function that gets called for each row to return the Cell Value for a Column. + } + {:field :low :width 70 + :cellClass "shaded-class" + :resizable true} + {:field :close :header "C" :resizable true + ;:cellClassRules {"bg-blue-500" (fn [p] + ; (println "ccr: " p) + ; (nil? (.-value p)))} + } + {:field :volume :width 70 + :resizable true + :cellStyle {:fontWeight "bold"}}]}) + +(plot/aggrid-ds *env* opts ds) diff --git a/src/rtable/snippet/agtable_unicode.clj b/src/rtable/snippet/agtable_unicode.clj new file mode 100644 index 0000000..5a031df --- /dev/null +++ b/src/rtable/snippet/agtable_unicode.clj @@ -0,0 +1,36 @@ +(ns rtable.snippet.agtable-unicode + (:require + [reval.core :refer [*env*]] + [tablecloth.api :as tc] + [rtable.plot :as plot] + [rtable.snippet.data.random-bars :refer [random-bar-ds]])) + +(def ds + (-> (random-bar-ds 10) + (tc/add-column :action ["😀" + "" + "" + "★" + "" + "" + "❂" + "" + "" + ""]))) + +ds + +(def opts + {:style {;:width "800px" :height "600px" + :width "800px" :height "600px" + ;:width "100%" :height "100%" + } + :timezone "America/Panama" + :columns [{:field :date} + {:field :open} + {:field :action}]}) + +(plot/aggrid-ds *env* opts ds) + + + diff --git a/src/rtable/snippet/data/random_bars.clj b/src/rtable/snippet/data/random_bars.clj new file mode 100644 index 0000000..87297e0 --- /dev/null +++ b/src/rtable/snippet/data/random_bars.clj @@ -0,0 +1,44 @@ +(ns rtable.snippet.data.random-bars + (:require + [tablecloth.api :as tc] + [tick.core :as t] + [rtable.snippet.data.random-series :as rand])) + +(defn days-ago-instant [n] + (-> (t/instant) + (t/<< (t/new-duration n :days)))) + +(defn higher [v] + (+ v (rand/random-float 0.5 1.5))) + +(defn lower [v] + (- v (rand/random-float 0.5 1.5))) + +(defn volume [_v] + (rand/random-float 10000 100000)) + +(defn jitter [v] + (+ v (rand/random-float -0.5 0.5))) + +(defn add-open-high-low-volume [ds] + (tc/add-columns ds + {:open #(map jitter (% :close)) + :high #(map higher (% :close)) + :low #(map lower (% :close)) + :volume #(map volume (% :close))})) + +(defn random-bar-ds [n] + (-> (tc/dataset + {:date (->> (range n) + (map days-ago-instant) + reverse) + :close (rand/random-series n)}) + add-open-high-low-volume)) + +(comment + (days-ago-instant 500) + (rand/random-float 5 10) + (rand/random-float -3 3) + (random-bar-ds 10) +; + ) \ No newline at end of file diff --git a/src/rtable/snippet/data/random_series.clj b/src/rtable/snippet/data/random_series.clj new file mode 100644 index 0000000..ba114e5 --- /dev/null +++ b/src/rtable/snippet/data/random_series.clj @@ -0,0 +1,55 @@ +(ns rtable.snippet.data.random-series + (:import + [java.util Random])) + +; Random Variable Initialization +(def rnd (new Random)) + +(defn random-float + [min max] + (+ min (* (.nextDouble rnd) (- max min)))) + +(comment + (random-float 10.0 100.0) +; + ) + +(defn zero-mean-random-value [] + (- (rand 0.005) 0.0025)) + +(defn random-return-value [] + ;; mimicing a normal distribution + (apply + (repeatedly 10 zero-mean-random-value))) + +(comment + (zero-mean-random-value) + (random-return-value) +; + ) + +(defn random-return-multiplyer [] + (+ 1.0 (random-return-value))) + +(defn random-return-series [n] + (take (dec n) (repeatedly random-return-multiplyer))) + +(comment + (random-return-series 5) +; + ) +(defn integrate-returns [returns] + (into [] + (reductions * 100.0 returns))) + +(comment + (integrate-returns (random-return-series 1000)) + ; + ) +(defn random-series + [n] + (integrate-returns (random-return-series n))) + +(comment + + (-> (random-series 100) + count)) diff --git a/src/rtable/snippet/highstock.clj b/src/rtable/snippet/highstock.clj new file mode 100644 index 0000000..bb0c32b --- /dev/null +++ b/src/rtable/snippet/highstock.clj @@ -0,0 +1,18 @@ +(ns rtable.snippet.highstock + (:require + [reval.core :refer [*env*]] + [rtable.plot :as plot] + [rtable.snippet.data.random-bars :refer [random-bar-ds]])) + +(def ds (random-bar-ds 200)) + +ds + +(plot/highstock-ds + *env* + {:charts [{:bar {:type :ohlc + :mode :candle} + :close :line} + {:volume :column} + {:close :line}]} + ds) \ No newline at end of file diff --git a/src/rtable/snippet/rtable.clj b/src/rtable/snippet/rtable.clj new file mode 100644 index 0000000..cb8e6d4 --- /dev/null +++ b/src/rtable/snippet/rtable.clj @@ -0,0 +1,15 @@ +(ns rtable.snippet.rtable + (:require + [rtable.plot :as plot] + [rtable.snippet.data.random-bars :refer [random-bar-ds]])) + +(def ds (random-bar-ds 200)) + +(plot/rtable-ds {:class "table-head-fixed padding-sm table-red table-striped table-hover" + :style {:width "50vw" + :height "40vh" + :border "3px solid green"} + :columns [{:path :date :format 'rtable.format.format-date/dt-yyyymmdd-hhmm :max-width "80px"} + {:path :close :format 'rtable.format.format-number/fmt-nodigits} + {:path :volume}]} + ds)