(Arne Babenhauserheide)
2014-12-02: use python driven by an output-pipe as a plotting tool. use python driven by an output-pipe as a plotting tool.
diff --git a/examples/ensemble-estimation.w b/examples/ensemble-estimation.w
--- a/examples/ensemble-estimation.w
+++ b/examples/ensemble-estimation.w
@@ -33,6 +33,9 @@ exec guile -L ~/wisp --language=wisp -e
define-module : examples ensemble-estimation
use-modules : srfi srfi-42 ; list-ec
+use-modules
+ : ice-9 popen
+ . #:select : open-output-pipe close-pipe
; seed the random number generator
set! *random-state* : random-state-from-platform
@@ -77,7 +80,7 @@ define* : write-multiple . x
define x^true '(0.5 0.6 0.7 0.1)
;; Then generate observations
-define y⁰-num 1000
+define y⁰-num 100
;; At the positions where they are measured. Drawn randomly to avoid
;; giving an undue weight to later values.
define y⁰-pos : list-ec (: i y⁰-num) : random y⁰-num
@@ -210,4 +213,20 @@ define : main args
mean y⁰
standard-deviation y⁰
. y⁰-std
-
+ ; now plot the result
+ let : : port : open-output-pipe "python -i"
+ format port "import pylab as pl\n"
+ format port "y0 = [float(i) for i in '~A'[1:-1].split(' ')]\n" y⁰
+ format port "ypos = [float(i) for i in '~A'[1:-1].split(' ')]\n" y⁰-pos
+ format port "yinit = [float(i) for i in '~A'[1:-1].split(' ')]\n" : list-ec (: i y⁰-pos) : H x^b i
+ format port "yopt = [float(i) for i in '~A'[1:-1].split(' ')]\n" : list-ec (: i y⁰-pos) : H x-opt i
+ format port "pl.plot(*zip(*sorted(zip(ypos, yinit))), label='prior model')\n"
+ format port "pl.plot(*zip(*sorted(zip(ypos, yopt))), label='optimized model')\n"
+ format port "pl.plot(*zip(*sorted(zip(ypos, y0))), label='measurements')\n"
+ format port "pl.legend()\n"
+ format port "pl.xlabel('position [arbitrary units]')\n"
+ format port "pl.ylabel('value [arbitrary units]')\n"
+ format port "pl.title('ensemble optimization results')\n"
+ format port "pl.show()\n"
+ format port "exit()\n"
+ close-pipe port