Mercurial > hg > may
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; |