Mercurial > hg > may
changeset 135:b1968c825a53
Horizontal bar charts. Doesn't really help with long label truncation, as the axe renderer just seems to stick the labels too far right anyway
author | Chris Cannam |
---|---|
date | Tue, 23 Apr 2013 12:54:43 +0100 |
parents | 194fff15f56f |
children | 1101ecb57e47 |
files | yetilab/plot/plot.yeti |
diffstat | 1 files changed, 60 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/yetilab/plot/plot.yeti Tue Apr 23 11:27:05 2013 +0100 +++ b/yetilab/plot/plot.yeti Tue Apr 23 12:54:43 2013 +0100 @@ -2,6 +2,7 @@ import org.jzy3d.plot3d.builder: Mapper; import org.jzy3d.plot3d.text.drawable: DrawableTextBillboard, DrawableTextBitmap; +import org.jzy3d.plot3d.text.renderers.jogl: JOGLTextRenderer; import org.jzy3d.maths: Range, Coord3d; import org.jzy3d.plot3d.primitives: Shape, HistogramBar, FlatLine2d, Polygon, Quad, Point; import org.jzy3d.plot3d.primitives.axes.layout.providers: StaticTickProvider; @@ -71,7 +72,8 @@ var animated = false, var normalised = false, var unit = "", - var xkeys = array (sort defaultXKeys) + var xkeys = array (sort defaultXKeys), + var horizontal = false, }; for options \case of @@ -81,6 +83,7 @@ Normalised n: parsed.normalised := n; Unit u: parsed.unit := u; Labels ll: parsed.labels := ll; + Horizontal h: parsed.horizontal := h; esac; if empty? parsed.labels then parsed.labels := mapIntoHash id id parsed.keys @@ -105,6 +108,30 @@ ChartLauncher#openChart(chart); ()); +newRect x y0 y1 z colour is number -> number -> number -> number -> ~Color -> 'a = + (poly = new Quad(); + poly#add(new Point(new Coord3d(x + 0.5, z, y0))); + poly#add(new Point(new Coord3d(x + 0.5, z, y1))); + poly#add(new Point(new Coord3d(x - 0.5, z, y1))); + poly#add(new Point(new Coord3d(x - 0.5, z, y0))); + poly#setWireframeDisplayed(true); + poly#setWireframeColor(colour); + poly#setFaceDisplayed(true); + poly#setColor(colour); + poly); + +newProjectedRect x y0 y1 z colour is number -> number -> number -> number -> ~Color -> 'a = + (poly = new Quad(); + poly#add(new Point(new Coord3d(x + 0.5, y0, z))); + poly#add(new Point(new Coord3d(x + 0.5, y1, z))); + poly#add(new Point(new Coord3d(x - 0.5, y1, z))); + poly#add(new Point(new Coord3d(x - 0.5, y0, z))); + poly#setWireframeDisplayed(true); + poly#setWireframeColor(colour); + poly#setFaceDisplayed(true); + poly#setColor(colour); + poly); + plotBarChart options values = (opts = parseOptions options (keys values) []; quality = Quality#Fastest; @@ -118,31 +145,49 @@ var x = n - i - 1; total = sum (map do k: if k in values then values[k] else 0 fi done opts.keys); for opts.keys do k: - bar = new HistogramBar(); v = if k in values then values[k] else 0 fi; v = if opts.normalised and total > 0 then v / total else v fi; - bar#setData(new Coord3d(x, 0, 0), v, 0.45, chartColour i); - bar#setWireframeDisplayed(false); - scene#add(bar); + c = chartColour i; + scene#add(newRect x 0 v 1 c); + scene#add(newProjectedRect x 0 v 1 c); ticks[i] := i; tickLabels#register(x, opts.labels[k]); i := i + 1; x := x - 1; done; - chart#getView()#setViewPoint(new Coord3d(pi/2, 0, 0)); + if opts.horizontal then + chart#getView()#setViewPoint(new Coord3d(0, pi/2, 0)); + else + chart#getView()#setViewPoint(new Coord3d(pi/2, 0, 0)); + fi; + axes = chart#getAxeLayout(); + if opts.horizontal then + axes#setZAxeLabelDisplayed(false); + axes#setZTickLabelDisplayed(false); + axes#setYAxeLabelDisplayed(true); + if opts.normalised then + axes#setYAxeLabel(""); + axes#setYTickRenderer(newPercentTickRenderer ()); + else + axes#setYAxeLabel(opts.unit); + fi; + else + axes#setYAxeLabelDisplayed(false); + axes#setYTickLabelDisplayed(false); + axes#setZAxeLabelDisplayed(true); + if opts.normalised then + axes#setZAxeLabel(""); + axes#setZTickRenderer(newPercentTickRenderer ()); + else + axes#setZAxeLabel(opts.unit); + fi; + fi; + axes#setXAxeLabelDisplayed(false); - axes#setYAxeLabelDisplayed(false); - axes#setZAxeLabelDisplayed(true); - if opts.normalised then - axes#setZAxeLabel(""); - axes#setZTickRenderer(newPercentTickRenderer ()); - else - axes#setZAxeLabel(opts.unit); - fi; axes#setXTickProvider(new StaticTickProvider(ticks)); axes#setXTickRenderer(tickLabels); - axes#setYTickLabelDisplayed(false); + ChartLauncher#openChart(chart); ()); @@ -201,18 +246,6 @@ done; stacked); -newRect x y0 y1 z colour is number -> number -> number -> number -> ~Color -> 'a = - (poly = new Quad(); - poly#add(new Point(new Coord3d(x + 0.5, z, y0))); - poly#add(new Point(new Coord3d(x + 0.5, z, y1))); - poly#add(new Point(new Coord3d(x - 0.5, z, y1))); - poly#add(new Point(new Coord3d(x - 0.5, z, y0))); - poly#setWireframeDisplayed(true); - poly#setWireframeColor(colour); - poly#setFaceDisplayed(true); - poly#setColor(colour); - poly); - plotStacked options values = (opts = parseOptions options (keys values) (keys values[head (keys values)]); quality = Quality#Fastest;