comparison yetilab/plot/plot.yeti @ 136:1101ecb57e47

Backed out changeset b1968c825a53 Horizontal bar chart doesn't work any better for us than vertical, and this polygon structure doesn't seem to render as cleanly
author Chris Cannam
date Tue, 23 Apr 2013 13:51:12 +0100
parents b1968c825a53
children b28512329efc
comparison
equal deleted inserted replaced
135:b1968c825a53 136:1101ecb57e47
1 module yetilab.plot.plot; 1 module yetilab.plot.plot;
2 2
3 import org.jzy3d.plot3d.builder: Mapper; 3 import org.jzy3d.plot3d.builder: Mapper;
4 import org.jzy3d.plot3d.text.drawable: DrawableTextBillboard, DrawableTextBitmap; 4 import org.jzy3d.plot3d.text.drawable: DrawableTextBillboard, DrawableTextBitmap;
5 import org.jzy3d.plot3d.text.renderers.jogl: JOGLTextRenderer;
6 import org.jzy3d.maths: Range, Coord3d; 5 import org.jzy3d.maths: Range, Coord3d;
7 import org.jzy3d.plot3d.primitives: Shape, HistogramBar, FlatLine2d, Polygon, Quad, Point; 6 import org.jzy3d.plot3d.primitives: Shape, HistogramBar, FlatLine2d, Polygon, Quad, Point;
8 import org.jzy3d.plot3d.primitives.axes.layout.providers: StaticTickProvider; 7 import org.jzy3d.plot3d.primitives.axes.layout.providers: StaticTickProvider;
9 import org.jzy3d.plot3d.primitives.axes.layout.renderers: ITickRenderer, TickLabelMap; 8 import org.jzy3d.plot3d.primitives.axes.layout.renderers: ITickRenderer, TickLabelMap;
10 import org.jzy3d.chart: Chart, ChartLauncher; 9 import org.jzy3d.chart: Chart, ChartLauncher;
70 var keys = array (sort defaultKeys), 69 var keys = array (sort defaultKeys),
71 var labels = [:], 70 var labels = [:],
72 var animated = false, 71 var animated = false,
73 var normalised = false, 72 var normalised = false,
74 var unit = "", 73 var unit = "",
75 var xkeys = array (sort defaultXKeys), 74 var xkeys = array (sort defaultXKeys)
76 var horizontal = false,
77 }; 75 };
78 for options 76 for options
79 \case of 77 \case of
80 Keys kk: parsed.keys := array kk; 78 Keys kk: parsed.keys := array kk;
81 XKeys xk: parsed.xkeys := array xk; 79 XKeys xk: parsed.xkeys := array xk;
82 Animated a: parsed.animated := a; 80 Animated a: parsed.animated := a;
83 Normalised n: parsed.normalised := n; 81 Normalised n: parsed.normalised := n;
84 Unit u: parsed.unit := u; 82 Unit u: parsed.unit := u;
85 Labels ll: parsed.labels := ll; 83 Labels ll: parsed.labels := ll;
86 Horizontal h: parsed.horizontal := h;
87 esac; 84 esac;
88 if empty? parsed.labels then 85 if empty? parsed.labels then
89 parsed.labels := mapIntoHash id id parsed.keys 86 parsed.labels := mapIntoHash id id parsed.keys
90 fi; 87 fi;
91 parsed); 88 parsed);
106 chart = new Chart(Quality#Nicest); 103 chart = new Chart(Quality#Nicest);
107 chart#getScene()#getGraph()#add(surface); 104 chart#getScene()#getGraph()#add(surface);
108 ChartLauncher#openChart(chart); 105 ChartLauncher#openChart(chart);
109 ()); 106 ());
110 107
111 newRect x y0 y1 z colour is number -> number -> number -> number -> ~Color -> 'a =
112 (poly = new Quad();
113 poly#add(new Point(new Coord3d(x + 0.5, z, y0)));
114 poly#add(new Point(new Coord3d(x + 0.5, z, y1)));
115 poly#add(new Point(new Coord3d(x - 0.5, z, y1)));
116 poly#add(new Point(new Coord3d(x - 0.5, z, y0)));
117 poly#setWireframeDisplayed(true);
118 poly#setWireframeColor(colour);
119 poly#setFaceDisplayed(true);
120 poly#setColor(colour);
121 poly);
122
123 newProjectedRect x y0 y1 z colour is number -> number -> number -> number -> ~Color -> 'a =
124 (poly = new Quad();
125 poly#add(new Point(new Coord3d(x + 0.5, y0, z)));
126 poly#add(new Point(new Coord3d(x + 0.5, y1, z)));
127 poly#add(new Point(new Coord3d(x - 0.5, y1, z)));
128 poly#add(new Point(new Coord3d(x - 0.5, y0, z)));
129 poly#setWireframeDisplayed(true);
130 poly#setWireframeColor(colour);
131 poly#setFaceDisplayed(true);
132 poly#setColor(colour);
133 poly);
134
135 plotBarChart options values = 108 plotBarChart options values =
136 (opts = parseOptions options (keys values) []; 109 (opts = parseOptions options (keys values) [];
137 quality = Quality#Fastest; 110 quality = Quality#Fastest;
138 quality#setAnimated(opts.animated); 111 quality#setAnimated(opts.animated);
139 chart = new Chart(quality); 112 chart = new Chart(quality);
143 tickLabels = new TickLabelMap(); 116 tickLabels = new TickLabelMap();
144 var i = 0; 117 var i = 0;
145 var x = n - i - 1; 118 var x = n - i - 1;
146 total = sum (map do k: if k in values then values[k] else 0 fi done opts.keys); 119 total = sum (map do k: if k in values then values[k] else 0 fi done opts.keys);
147 for opts.keys do k: 120 for opts.keys do k:
121 bar = new HistogramBar();
148 v = if k in values then values[k] else 0 fi; 122 v = if k in values then values[k] else 0 fi;
149 v = if opts.normalised and total > 0 then v / total else v fi; 123 v = if opts.normalised and total > 0 then v / total else v fi;
150 c = chartColour i; 124 bar#setData(new Coord3d(x, 0, 0), v, 0.45, chartColour i);
151 scene#add(newRect x 0 v 1 c); 125 bar#setWireframeDisplayed(false);
152 scene#add(newProjectedRect x 0 v 1 c); 126 scene#add(bar);
153 ticks[i] := i; 127 ticks[i] := i;
154 tickLabels#register(x, opts.labels[k]); 128 tickLabels#register(x, opts.labels[k]);
155 i := i + 1; 129 i := i + 1;
156 x := x - 1; 130 x := x - 1;
157 done; 131 done;
158 if opts.horizontal then 132 chart#getView()#setViewPoint(new Coord3d(pi/2, 0, 0));
159 chart#getView()#setViewPoint(new Coord3d(0, pi/2, 0)); 133 axes = chart#getAxeLayout();
134 axes#setXAxeLabelDisplayed(false);
135 axes#setYAxeLabelDisplayed(false);
136 axes#setZAxeLabelDisplayed(true);
137 if opts.normalised then
138 axes#setZAxeLabel("");
139 axes#setZTickRenderer(newPercentTickRenderer ());
160 else 140 else
161 chart#getView()#setViewPoint(new Coord3d(pi/2, 0, 0)); 141 axes#setZAxeLabel(opts.unit);
162 fi; 142 fi;
163
164 axes = chart#getAxeLayout();
165 if opts.horizontal then
166 axes#setZAxeLabelDisplayed(false);
167 axes#setZTickLabelDisplayed(false);
168 axes#setYAxeLabelDisplayed(true);
169 if opts.normalised then
170 axes#setYAxeLabel("");
171 axes#setYTickRenderer(newPercentTickRenderer ());
172 else
173 axes#setYAxeLabel(opts.unit);
174 fi;
175 else
176 axes#setYAxeLabelDisplayed(false);
177 axes#setYTickLabelDisplayed(false);
178 axes#setZAxeLabelDisplayed(true);
179 if opts.normalised then
180 axes#setZAxeLabel("");
181 axes#setZTickRenderer(newPercentTickRenderer ());
182 else
183 axes#setZAxeLabel(opts.unit);
184 fi;
185 fi;
186
187 axes#setXAxeLabelDisplayed(false);
188 axes#setXTickProvider(new StaticTickProvider(ticks)); 143 axes#setXTickProvider(new StaticTickProvider(ticks));
189 axes#setXTickRenderer(tickLabels); 144 axes#setXTickRenderer(tickLabels);
190 145 axes#setYTickLabelDisplayed(false);
191 ChartLauncher#openChart(chart); 146 ChartLauncher#openChart(chart);
192 ()); 147 ());
193 148
194 plotLines options values = 149 plotLines options values =
195 (opts = parseOptions options (keys values) (keys values[head (keys values)]); 150 (opts = parseOptions options (keys values) (keys values[head (keys values)]);
244 prev[xk] := height; 199 prev[xk] := height;
245 done; 200 done;
246 done; 201 done;
247 stacked); 202 stacked);
248 203
204 newRect x y0 y1 z colour is number -> number -> number -> number -> ~Color -> 'a =
205 (poly = new Quad();
206 poly#add(new Point(new Coord3d(x + 0.5, z, y0)));
207 poly#add(new Point(new Coord3d(x + 0.5, z, y1)));
208 poly#add(new Point(new Coord3d(x - 0.5, z, y1)));
209 poly#add(new Point(new Coord3d(x - 0.5, z, y0)));
210 poly#setWireframeDisplayed(true);
211 poly#setWireframeColor(colour);
212 poly#setFaceDisplayed(true);
213 poly#setColor(colour);
214 poly);
215
249 plotStacked options values = 216 plotStacked options values =
250 (opts = parseOptions options (keys values) (keys values[head (keys values)]); 217 (opts = parseOptions options (keys values) (keys values[head (keys values)]);
251 quality = Quality#Fastest; 218 quality = Quality#Fastest;
252 quality#setAnimated(opts.animated); 219 quality#setAnimated(opts.animated);
253 chart = new Chart(quality); 220 chart = new Chart(quality);