diff yetilab/plot/plot.yeti @ 125:0f362d1de06e

Toward stacked charts
author Chris Cannam
date Sat, 20 Apr 2013 12:14:40 +0100
parents 83f127d60c58
children 80eb9b6d4fb9
line wrap: on
line diff
--- a/yetilab/plot/plot.yeti	Fri Apr 19 19:33:22 2013 +0100
+++ b/yetilab/plot/plot.yeti	Sat Apr 20 12:14:40 2013 +0100
@@ -2,7 +2,7 @@
 
 import org.jzy3d.plot3d.builder: Mapper;
 import org.jzy3d.maths: Range, Coord3d;
-import org.jzy3d.plot3d.primitives: Shape, HistogramBar, FlatLine2d;
+import org.jzy3d.plot3d.primitives: Shape, HistogramBar, FlatLine2d, Polygon, Point;
 import org.jzy3d.plot3d.primitives.axes.layout.providers: StaticTickProvider;
 import org.jzy3d.plot3d.primitives.axes.layout.renderers: TickLabelMap;
 import org.jzy3d.chart: Chart, ChartLauncher;
@@ -115,6 +115,50 @@
     ChartLauncher#openChart(chart);
     ());
 
+stack keys xkeys values =
+   (stacked = mapIntoHash id \(mapIntoHash id \0 xkeys) keys;
+    prev = mapIntoHash id \0 xkeys;
+    for xkeys do xk:
+        for keys do k:
+            value = if xk in values[k] then values[k][xk] else 0 fi;
+            height = prev[xk] + value;
+            stacked[k][xk] := height;
+            prev[xk] := height;
+        done;
+    done;
+    stacked);
+
+plotStacked keys xkeys unit values =
+   (chart = new Chart(Quality#Nicest);
+    scene = chart#getScene();
+    stacked = stack keys xkeys values;
+    var z = 0;
+    for keys do k:
+        heights = stacked[k];
+        poly = new Polygon();
+        poly#setWireframeDisplayed(true);
+        poly#setWireframeColor(Color#random());
+        poly#setFaceDisplayed(true);
+        poly#setColor(Color#random());
+        poly#add(new Point(new Coord3d(0, 0, z)));
+        var x = 0;
+        for xkeys do xk:
+            poly#add(new Point(new Coord3d(x, heights[xk], z)));
+            x := x + 1;
+        done;
+        poly#add(new Point(new Coord3d(x - 1, 0, z)));
+        scene#add(poly);
+        z := z + 1;
+    done;
+    chart#getView()#setViewPoint(new Coord3d(0, 0, 0));
+    axes = chart#getAxeLayout();
+    axes#setXAxeLabelDisplayed(false);
+    axes#setYAxeLabelDisplayed(false);
+    axes#setZAxeLabelDisplayed(true);
+    axes#setZAxeLabel(unit);
+    axes#setYTickLabelDisplayed(false);
+    ChartLauncher#openChart(chart);
+    ());
 
 plotStructure structure =
     case structure of
@@ -131,6 +175,8 @@
     plotMatrix, 
     plotBarChart,
     plotLines,
+    stack,
+    plotStacked,
     plotStructure,
 }