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