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 =