hmeap-0.7: Help/plot.hs
-- Use hmatrix and gnuplot bindings to plot unit dimensioned features.
import Control.Monad
import Data.List
import qualified Data.Packed.Convert as G
import qualified Data.Packed.Matrix as G
import qualified Data.Packed.Vector as G
import qualified Graphics.Gnuplot.Simple as P
import qualified Numeric.GSL.Vector as G
import qualified Sound.Analysis.Meapsoft as M
import System.Environment
import System.IO
normalize :: G.Vector Double -> G.Vector Double
normalize v =
let l = G.vectorMin v
r = G.vectorMax v
d = r - l
v' = G.vectorMapValR G.AddConstant (negate l) v
in G.vectorMapValR G.Scale (recip d) v'
main :: IO ()
main =
do a <- getArgs
unless (length a > 1)
(error ("feature-file feature ..\n" ++
show M.feature_names))
let (fn:ns) = a
(Right mp) <- M.read_meap fn
let fs = M.features mp
uf = map (\n -> M.required_feature n fs) ("onset_time":ns)
ar = M.uarray_data mp
m = G.matrixFromArray ar
ufc = map M.feature_column uf
vs = G.toRows (G.extractRows ufc (G.trans m))
vs' = map normalize vs
(ot:ls) = map G.toList vs'
ls' = map (zip ot) ls
P.plotPaths
[P.XLabel "onset_time", P.YLabel (intercalate "," ns)]
ls'