generateme / Feb 27 2020
with bharendt
DataVis in Clojure using R
Short showcase of various charting libraries available in R and accessible with clojisr library.
{:deps
{org.clojure/clojure {:mvn/version "1.10.1"}
org.slf4j/slf4j-nop {:mvn/version "1.7.30"}
scicloj/clojisr {:mvn/version "1.0.0-BETA8"}}}
deps.edn
Extensible Data Notation
echo "maxinbuf 4194304" > /etc/Rserv.conf
0.1s
Bash in Clojure
(require [clojisr.v1.r :refer [r r+]]
[clojisr.v1.require :refer [require-r]]
[clojisr.v1.applications.plotting :refer [plot->file]])
0.0s
Clojure
Setup
Ensure you have installed following packages on R:
lattice
ggplot2
mlmRev
RColorBrewer
Graphics
First let's start with basic graphics library.
(require-r [graphics :as gr])
1.2s
Clojure
Graphics library renders directly to the device so we need to wrap charting functions in Clojure fn.
(def data (repeatedly 100000 (+ (rand) (rand) (rand) (rand) (rand))))
(plot->file "/results/graphics.jpg"
(gr/hist data :main "Histogram" :col "red" :freq false)
:quality 90
:width 800)
1.2s
Clojure
Lattice
(require-r [lattice :as lat]
[mlmRev])
0.6s
Clojure
Little helper to glue symbols to string.
(defmacro formula [& frm] (r (apply str frm)))
0.1s
Clojure
user/formula
(def histogram (-> (formula "~" gcsescore | factor (score))
(lat/histogram :data r.mlmRev/Chem97)))
0.1s
Clojure
user/histogram
(plot->file "/results/histogram.png" histogram :width 800)
0.7s
Clojure
ggplot2
(require-r [ggplot2 :as gg])
0.9s
Clojure
(plot->file "/results/ggplot.png"
(r+ (gg/ggplot gg/diamonds (gg/aes :x carat
:y price))
(gg/geom_point (gg/aes :color cut))
(gg/geom_smooth)) :width 800)
3.4s
Clojure
Hexbin
(require-r [utils :as u])
(u/install-packages "hexbin")
7.8s
Clojure
(require-r [hexbin :as h]
[RColorBrewer :as brewer]
[stats :as stats]
[grDevices :as dev]
[base :refer [rev]])
3.1s
Clojure
(def x (stats/rnorm :mean 1.5 5000))
(def y (stats/rnorm :mean 1.6 5000))
(def bin (h/hexbin x y :xbins 40))
(def my-colors (-> (brewer/brewer-pal 11 "Spectral")
(rev)
(dev/colorRampPalette)))
0.1s
Clojure
user/my-colors
(plot->file "/results/hexbin.png" (h/plot bin
:main ""
:colramp my-colors
:xlab "x" :ylab "y") :width 800)
0.7s
Clojure
CC-BY