comparison yetilab/plot/plot.yeti @ 137:b28512329efc

Offscreen rendering & save-to-file (save-to-file works, offscreen currently doesn't)
author Chris Cannam
date Tue, 23 Apr 2013 16:27:28 +0100
parents 1101ecb57e47
children f68c92bd2adb
comparison
equal deleted inserted replaced
136:1101ecb57e47 137:b28512329efc
12 import org.jzy3d.colors.colormaps: ColorMapRainbow; 12 import org.jzy3d.colors.colormaps: ColorMapRainbow;
13 import org.jzy3d.colors: ColorMapper, Color; 13 import org.jzy3d.colors: ColorMapper, Color;
14 import org.jzy3d.plot3d.rendering.canvas: Quality; 14 import org.jzy3d.plot3d.rendering.canvas: Quality;
15 import org.jzy3d.plot3d.rendering.view.modes: ViewPositionMode; 15 import org.jzy3d.plot3d.rendering.view.modes: ViewPositionMode;
16 16
17 import javax.imageio: ImageIO;
18
19 import java.io: File;
20
17 chartColours = array [ 21 chartColours = array [
18 { r = 82, g = 126, b = 154 }, // dark steel blue 22 { r = 82, g = 126, b = 154 }, // dark steel blue
19 { r = 161, g = 54, b = 2 }, // red 23 { r = 161, g = 54, b = 2 }, // red
20 { r = 207, g = 228, b = 148 }, // grey-green 24 { r = 207, g = 228, b = 148 }, // grey-green
21 { r = 21, g = 183, b = 197 }, // light blue 25 { r = 21, g = 183, b = 197 }, // light blue
69 var keys = array (sort defaultKeys), 73 var keys = array (sort defaultKeys),
70 var labels = [:], 74 var labels = [:],
71 var animated = false, 75 var animated = false,
72 var normalised = false, 76 var normalised = false,
73 var unit = "", 77 var unit = "",
74 var xkeys = array (sort defaultXKeys) 78 var xkeys = array (sort defaultXKeys),
79 var saveTo = "",
80 var display = true,
75 }; 81 };
76 for options 82 for options
77 \case of 83 \case of
78 Keys kk: parsed.keys := array kk; 84 Keys kk: parsed.keys := array kk;
79 XKeys xk: parsed.xkeys := array xk; 85 XKeys xk: parsed.xkeys := array xk;
80 Animated a: parsed.animated := a; 86 Animated a: parsed.animated := a;
81 Normalised n: parsed.normalised := n; 87 Normalised n: parsed.normalised := n;
82 Unit u: parsed.unit := u; 88 Unit u: parsed.unit := u;
83 Labels ll: parsed.labels := ll; 89 Labels ll: parsed.labels := ll;
90 SaveTo file: parsed.saveTo := file;
91 Display d: parsed.display := d;
84 esac; 92 esac;
85 if empty? parsed.labels then 93 if empty? parsed.labels then
86 parsed.labels := mapIntoHash id id parsed.keys 94 parsed.labels := mapIntoHash id id parsed.keys
87 fi; 95 fi;
88 parsed); 96 parsed);
89 97
98 newChart opts =
99 (quality = Quality#Fastest;
100 quality#setAnimated(opts.animated);
101 // if opts.display then
102 new Chart(quality);
103 // else
104 // new Chart(quality, "offscreen,640,640");
105 // fi);
106 );
107
108 showChart opts chart is 'a -> ~Chart -> () =
109 (//if opts.display then
110 \() ChartLauncher#openChart(chart);
111 // fi;
112 if opts.saveTo != "" then
113 \() chart#screenshot(opts.saveTo);
114 fi);
115
90 plotMatrix matrix = 116 plotMatrix matrix =
91 (mapper = newMatrixMapper matrix; 117 (mapper = newMatrixMapper matrix;
92 size = matrix.size; 118 size = matrix.size;
93 xrange = new Range(0, size.columns - 1); 119 xrange = new Range(0, size.columns - 1);
94 yrange = new Range(0, size.rows - 1); 120 yrange = new Range(0, size.rows - 1);
105 ChartLauncher#openChart(chart); 131 ChartLauncher#openChart(chart);
106 ()); 132 ());
107 133
108 plotBarChart options values = 134 plotBarChart options values =
109 (opts = parseOptions options (keys values) []; 135 (opts = parseOptions options (keys values) [];
110 quality = Quality#Fastest; 136 chart = newChart opts;
111 quality#setAnimated(opts.animated);
112 chart = new Chart(quality);
113 var n = length opts.keys; 137 var n = length opts.keys;
114 scene = chart#getScene(); 138 scene = chart#getScene();
115 ticks = new float[n+1]; 139 ticks = new double[n+1];
116 tickLabels = new TickLabelMap(); 140 tickLabels = new TickLabelMap();
117 var i = 0; 141 var i = 0;
118 var x = n - i - 1; 142 var x = n - i - 1;
119 total = sum (map do k: if k in values then values[k] else 0 fi done opts.keys); 143 total = sum (map do k: if k in values then values[k] else 0 fi done opts.keys);
120 for opts.keys do k: 144 for opts.keys do k:
141 axes#setZAxeLabel(opts.unit); 165 axes#setZAxeLabel(opts.unit);
142 fi; 166 fi;
143 axes#setXTickProvider(new StaticTickProvider(ticks)); 167 axes#setXTickProvider(new StaticTickProvider(ticks));
144 axes#setXTickRenderer(tickLabels); 168 axes#setXTickRenderer(tickLabels);
145 axes#setYTickLabelDisplayed(false); 169 axes#setYTickLabelDisplayed(false);
146 ChartLauncher#openChart(chart); 170 showChart opts chart);
147 ());
148 171
149 plotLines options values = 172 plotLines options values =
150 (opts = parseOptions options (keys values) (keys values[head (keys values)]); 173 (opts = parseOptions options (keys values) (keys values[head (keys values)]);
151 quality = Quality#Fastest; 174 chart = newChart opts;
152 quality#setAnimated(opts.animated);
153 chart = new Chart(quality);
154 scene = chart#getScene(); 175 scene = chart#getScene();
155 n = length opts.xkeys; 176 n = length opts.xkeys;
156 var z = 0; 177 var z = 0;
157 for opts.keys do k: 178 for opts.keys do k:
158 v = values[k]; 179 v = values[k];
177 axes#setXAxeLabelDisplayed(false); 198 axes#setXAxeLabelDisplayed(false);
178 axes#setYAxeLabelDisplayed(false); 199 axes#setYAxeLabelDisplayed(false);
179 axes#setZAxeLabelDisplayed(true); 200 axes#setZAxeLabelDisplayed(true);
180 axes#setZAxeLabel(opts.unit); 201 axes#setZAxeLabel(opts.unit);
181 axes#setYTickLabelDisplayed(false); 202 axes#setYTickLabelDisplayed(false);
182 ChartLauncher#openChart(chart); 203 showChart opts chart);
183 ());
184 204
185 stack keys xkeys values normalised = 205 stack keys xkeys values normalised =
186 (stacked = mapIntoHash id \(mapIntoHash id \{ y0 = 0, y1 = 0 } xkeys) keys; 206 (stacked = mapIntoHash id \(mapIntoHash id \{ y0 = 0, y1 = 0 } xkeys) keys;
187 prev = mapIntoHash id \0 xkeys; 207 prev = mapIntoHash id \0 xkeys;
188 valueOf k xk = if xk in values[k] then values[k][xk] else 0 fi; 208 valueOf k xk = if xk in values[k] then values[k][xk] else 0 fi;
213 poly#setColor(colour); 233 poly#setColor(colour);
214 poly); 234 poly);
215 235
216 plotStacked options values = 236 plotStacked options values =
217 (opts = parseOptions options (keys values) (keys values[head (keys values)]); 237 (opts = parseOptions options (keys values) (keys values[head (keys values)]);
218 quality = Quality#Fastest; 238 chart = newChart opts;
219 quality#setAnimated(opts.animated);
220 chart = new Chart(quality);
221 scene = chart#getScene(); 239 scene = chart#getScene();
222 stacked = stack opts.keys opts.xkeys values opts.normalised; 240 stacked = stack opts.keys opts.xkeys values opts.normalised;
223 var z = 0; 241 var z = 0;
224 var ty = 0; 242 var ty = 0;
225 xtickLabels = new TickLabelMap(); 243 xtickLabels = new TickLabelMap();
250 axes#setZTickRenderer(newPercentTickRenderer ()); 268 axes#setZTickRenderer(newPercentTickRenderer ());
251 else 269 else
252 axes#setZAxeLabel(opts.unit); 270 axes#setZAxeLabel(opts.unit);
253 fi; 271 fi;
254 axes#setYTickLabelDisplayed(false); 272 axes#setYTickLabelDisplayed(false);
255 ChartLauncher#openChart(chart); 273 showChart opts chart);
256 ());
257 274
258 plotStructure structure = 275 plotStructure structure =
259 case structure of 276 case structure of
260 Grid matrix: 277 Grid matrix:
261 plotMatrix matrix; 278 plotMatrix matrix;