Note that there are some explanatory texts on larger screens.

plurals
  1. POEquivalent to imshow in Clojure?
    text
    copied!<p>I'm looking for a way to visualize a 2d java array that's being updated in a simulation written in clojure the same way I would use imshow in matplotlib to visualize a numpy array. </p> <p>What's the best way to do this? Alternatively I could save the arrays to disk and visualize it in matplotlib. What would be the best way to go about that?</p> <hr> <p>Here's my attempt based on the Java code <a href="http://forums.sun.com/thread.jspa?messageID=10399683#10399683" rel="nofollow">here</a>, but making the BufferedImage really slow. Is there any way to speed it up?:</p> <pre><code>(import '(java.awt Color Graphics Graphics2D Dimension GradientPaint BorderLayout) '(java.awt.image BufferedImage) '(javax.swing JPanel JFrame)) (def L 1024) (def image (BufferedImage. (* L 1) (* L 1) (. BufferedImage TYPE_INT_RGB))) (def g2 (. image createGraphics)) (defn get-color-map [] (let [STEPS 100 colormap (BufferedImage. STEPS 1 (BufferedImage/TYPE_INT_RGB)) g (.createGraphics colormap) paint (GradientPaint. 0 0 (Color/RED) STEPS 0 (Color/GREEN)) ] (doto g (.setPaint paint) (.fillRect 0 0 STEPS 1)) colormap)) (defn get-color [x start finish colormap] (let [y (/ (- x start) (- finish start)) STEPS 100] (Color. (.getRGB colormap (int (* y STEPS)) 0)))) (defn fill-image [^"[[D" arr ^Graphics2D g sideX sideY ^BufferedImage colormap] (dotimes [i (alength arr)] (dotimes [j (alength ^"[D" (aget arr 0))] (doto g (.setColor (get-color (aget ^"[[D" arr (int i) (int j)) -10.0 10.0 colormap)) (.fillRect (int (* i sideX)) (int (* j sideY)) sideX sideY))))) (def panel (doto (proxy [JPanel] [] (paintComponent [g] (.drawImage g image 0 0 nil))))) (def frame (doto (JFrame. "Heat Map") (.add panel BorderLayout/CENTER) (.pack) (.setLocationRelativeTo nil) (.setVisible true))) </code></pre> <p>And here's an attempt using processing from incanter. It's also pretty slow:</p> <pre><code>(let [sktch (sketch (setup [] (doto this ;no-loop (size 1024 1024) (framerate 15) smooth)) ;; define the draw function (draw [] (def A (gaussian-matrix 1024 0 1)) (dotimes [i 1024] (dotimes [j 1024] (doto this (stroke (int (abs (* (aget A i j) 255)))) (point i j))))))] (view sktch :size [1024 1024])) </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload