Mercurial > hg > may
comparison yetilab/plot/plot.yeti @ 133:40089797b032
Axis labels (percents and dates)
author | Chris Cannam |
---|---|
date | Mon, 22 Apr 2013 21:46:37 +0100 |
parents | f268b2982ed4 |
children | 194fff15f56f |
comparison
equal
deleted
inserted
replaced
132:f268b2982ed4 | 133:40089797b032 |
---|---|
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.maths: Range, Coord3d; | 5 import org.jzy3d.maths: Range, Coord3d; |
6 import org.jzy3d.plot3d.primitives: Shape, HistogramBar, FlatLine2d, Polygon, Quad, Point; | 6 import org.jzy3d.plot3d.primitives: Shape, HistogramBar, FlatLine2d, Polygon, Quad, Point; |
7 import org.jzy3d.plot3d.primitives.axes.layout.providers: StaticTickProvider; | 7 import org.jzy3d.plot3d.primitives.axes.layout.providers: StaticTickProvider; |
8 import org.jzy3d.plot3d.primitives.axes.layout.renderers: TickLabelMap; | 8 import org.jzy3d.plot3d.primitives.axes.layout.renderers: ITickRenderer, TickLabelMap; |
9 import org.jzy3d.chart: Chart, ChartLauncher; | 9 import org.jzy3d.chart: Chart, ChartLauncher; |
10 import org.jzy3d.plot3d.builder: Builder; | 10 import org.jzy3d.plot3d.builder: Builder; |
11 import org.jzy3d.plot3d.builder.concrete: OrthonormalGrid; | 11 import org.jzy3d.plot3d.builder.concrete: OrthonormalGrid; |
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; |
54 double f(double x, double y) | 54 double f(double x, double y) |
55 mapFunction x y | 55 mapFunction x y |
56 end; | 56 end; |
57 new FMapper()); | 57 new FMapper()); |
58 | 58 |
59 newPercentTickRenderer () = | |
60 (f v = " \(int (v * 100))%"; | |
61 class PercentageTickRenderer extends ITickRenderer | |
62 String format(double value) f value, | |
63 String format(float value) f value | |
64 end; | |
65 new PercentageTickRenderer()); | |
66 | |
59 parseOptions options defaultKeys defaultXKeys = | 67 parseOptions options defaultKeys defaultXKeys = |
60 (parsed = { | 68 (parsed = { |
61 var keys = sort defaultKeys, | 69 var keys = array (sort defaultKeys), |
62 var labels = [:], | 70 var labels = [:], |
63 var animated = false, | 71 var animated = false, |
64 var normalised = false, | 72 var normalised = false, |
65 var unit = "", | 73 var unit = "", |
66 var xkeys = sort defaultXKeys | 74 var xkeys = array (sort defaultXKeys) |
67 }; | 75 }; |
68 for options | 76 for options |
69 \case of | 77 \case of |
70 Keys kk: parsed.keys := kk; | 78 Keys kk: parsed.keys := array kk; |
71 XKeys xk: parsed.xkeys := xk; | 79 XKeys xk: parsed.xkeys := array xk; |
72 Animated a: parsed.animated := a; | 80 Animated a: parsed.animated := a; |
73 Normalised n: parsed.normalised := n; | 81 Normalised n: parsed.normalised := n; |
74 Unit u: parsed.unit := u; | 82 Unit u: parsed.unit := u; |
75 Labels ll: parsed.labels := ll; | 83 Labels ll: parsed.labels := ll; |
76 esac; | 84 esac; |
106 scene = chart#getScene(); | 114 scene = chart#getScene(); |
107 ticks = new float[n+1]; | 115 ticks = new float[n+1]; |
108 tickLabels = new TickLabelMap(); | 116 tickLabels = new TickLabelMap(); |
109 var i = 0; | 117 var i = 0; |
110 var x = n - i - 1; | 118 var x = n - i - 1; |
119 total = sum (map do k: values[k] done opts.keys); | |
111 for opts.keys do k: | 120 for opts.keys do k: |
112 bar = new HistogramBar(); | 121 bar = new HistogramBar(); |
113 bar#setData(new Coord3d(x, 0, 0), values[k], 0.45, chartColour i); | 122 v = values[k]; |
123 v = if opts.normalised and total > 0 then v / total else v fi; | |
124 bar#setData(new Coord3d(x, 0, 0), v, 0.45, chartColour i); | |
114 bar#setWireframeDisplayed(false); | 125 bar#setWireframeDisplayed(false); |
115 scene#add(bar); | 126 scene#add(bar); |
116 ticks[i] := i; | 127 ticks[i] := i; |
117 tickLabels#register(x, opts.labels[k]); | 128 tickLabels#register(x, opts.labels[k]); |
118 i := i + 1; | 129 i := i + 1; |
121 chart#getView()#setViewPoint(new Coord3d(pi/2, 0, 0)); | 132 chart#getView()#setViewPoint(new Coord3d(pi/2, 0, 0)); |
122 axes = chart#getAxeLayout(); | 133 axes = chart#getAxeLayout(); |
123 axes#setXAxeLabelDisplayed(false); | 134 axes#setXAxeLabelDisplayed(false); |
124 axes#setYAxeLabelDisplayed(false); | 135 axes#setYAxeLabelDisplayed(false); |
125 axes#setZAxeLabelDisplayed(true); | 136 axes#setZAxeLabelDisplayed(true); |
126 axes#setZAxeLabel(opts.unit); | 137 if opts.normalised then |
138 axes#setZAxeLabel(""); | |
139 axes#setZTickRenderer(newPercentTickRenderer ()); | |
140 else | |
141 axes#setZAxeLabel(opts.unit); | |
142 fi; | |
127 axes#setXTickProvider(new StaticTickProvider(ticks)); | 143 axes#setXTickProvider(new StaticTickProvider(ticks)); |
128 axes#setXTickRenderer(tickLabels); | 144 axes#setXTickRenderer(tickLabels); |
129 axes#setYTickLabelDisplayed(false); | 145 axes#setYTickLabelDisplayed(false); |
130 ChartLauncher#openChart(chart); | 146 ChartLauncher#openChart(chart); |
131 ()); | 147 ()); |
204 chart = new Chart(quality); | 220 chart = new Chart(quality); |
205 scene = chart#getScene(); | 221 scene = chart#getScene(); |
206 stacked = stack opts.keys opts.xkeys values opts.normalised; | 222 stacked = stack opts.keys opts.xkeys values opts.normalised; |
207 var z = 0; | 223 var z = 0; |
208 var ty = 0; | 224 var ty = 0; |
225 xtickLabels = new TickLabelMap(); | |
226 for [0..length opts.xkeys - 1] do x: | |
227 xtickLabels#register(x, opts.xkeys[x]); | |
228 done; | |
209 for opts.keys do k: | 229 for opts.keys do k: |
210 ranges = stacked[k]; | 230 ranges = stacked[k]; |
211 var x = 0; | |
212 c = chartColour z; | 231 c = chartColour z; |
213 for opts.xkeys do xk: | 232 for [0..length opts.xkeys - 1] do x: |
233 xk = opts.xkeys[x]; | |
214 rect = newRect x ranges[xk].y0 ranges[xk].y1 z c; | 234 rect = newRect x ranges[xk].y0 ranges[xk].y1 z c; |
215 scene#add(rect); | 235 scene#add(rect); |
216 x := x + 1; | |
217 done; | 236 done; |
218 text = new DrawableTextBitmap(opts.labels[k], new Coord3d(-5, z, ty), c); | 237 text = new DrawableTextBitmap(opts.labels[k], new Coord3d(-5, z, ty), c); |
219 scene#add(text); | 238 scene#add(text); |
220 z := z - 1; | 239 z := z - 1; |
221 ty := ty + 0.1; | 240 ty := ty + 0.1; |
222 done; | 241 done; |
223 chart#getView()#setViewPoint(new Coord3d(-pi/2, 0, 0)); | 242 chart#getView()#setViewPoint(new Coord3d(-pi/2, 0, 0)); |
224 axes = chart#getAxeLayout(); | 243 axes = chart#getAxeLayout(); |
225 axes#setXAxeLabelDisplayed(false); | 244 axes#setXAxeLabelDisplayed(false); |
245 axes#setXTickRenderer(xtickLabels); | |
226 axes#setYAxeLabelDisplayed(false); | 246 axes#setYAxeLabelDisplayed(false); |
227 axes#setZAxeLabelDisplayed(true); | 247 axes#setZAxeLabelDisplayed(true); |
228 axes#setZAxeLabel(opts.unit); | 248 if opts.normalised then |
249 axes#setZAxeLabel(""); | |
250 axes#setZTickRenderer(newPercentTickRenderer ()); | |
251 else | |
252 axes#setZAxeLabel(opts.unit); | |
253 fi; | |
229 axes#setYTickLabelDisplayed(false); | 254 axes#setYTickLabelDisplayed(false); |
230 ChartLauncher#openChart(chart); | 255 ChartLauncher#openChart(chart); |
231 ()); | 256 ()); |
232 | 257 |
233 plotStructure structure = | 258 plotStructure structure = |