Mercurial > hg > may
view yetilab/plot/plot.yeti @ 119:ae802edb0561
Add bar chart plotting
author | Chris Cannam |
---|---|
date | Thu, 18 Apr 2013 17:00:08 +0100 |
parents | 098b4efde5b1 |
children | a524a15935f0 |
line wrap: on
line source
module yetilab.plot.plot; import org.jzy3d.plot3d.builder: Mapper; import org.jzy3d.maths: Range, Coord3d; import org.jzy3d.plot3d.primitives: Shape, HistogramBar; import org.jzy3d.plot3d.primitives.axes.layout.providers: StaticTickProvider; import org.jzy3d.plot3d.primitives.axes.layout.renderers: TickLabelMap; import org.jzy3d.chart: Chart, ChartLauncher; import org.jzy3d.plot3d.builder: Builder; import org.jzy3d.plot3d.builder.concrete: OrthonormalGrid; import org.jzy3d.colors.colormaps: ColorMapRainbow; import org.jzy3d.colors: ColorMapper, Color; import org.jzy3d.plot3d.rendering.canvas: Quality; import org.jzy3d.plot3d.rendering.view.modes: ViewPositionMode; newMatrixMapper matrix = (class MMapper extends Mapper double f(double x, double y) result = matrix.getAt y x; println "f(\(x),\(y)) -> \(result)"; result end; new MMapper()); newMatrixLogMapper matrix = (class MMapper extends Mapper double f(double x, double y) ln (matrix.getAt y x) end; new MMapper()); newMapper mapFunction = (class FMapper extends Mapper double f(double x, double y) mapFunction x y end; new FMapper()); plotMatrix matrix = (mapper = newMatrixMapper matrix; size = matrix.size; xrange = new Range(0, size.columns - 1); yrange = new Range(0, size.rows - 1); grid = new OrthonormalGrid(xrange, size.columns, yrange, size.rows); println "Matrix size: \(size)"; surface = Builder#buildOrthonormal(grid, mapper); //??? big? println "Z Bounds: \(surface#getBounds()#getZmin()) -> \(surface#getBounds()#getZmax())"; surface#setFaceDisplayed(false); surface#setWireframeDisplayed(true); surface#setWireframeColor(Color#BLACK); // chart = new Chart(Quality#Fastest, "swing"); chart = new Chart(Quality#Nicest); chart#getScene()#getGraph()#add(surface); ChartLauncher#openChart(chart); ()); plotBarChart keys unit values = (chart = new Chart(Quality#Nicest); var n = 0; scene = chart#getScene(); ticks = new float[length keys]; tickLabels = new TickLabelMap(); for keys do k: bar = new HistogramBar(); bar#setData(new Coord3d(n, 0, 0), values[k], 0.45, Color#random()); bar#setWireframeDisplayed(false); scene#add(bar); ticks[n] := n; tickLabels#register(n, k); n := n + 1; done; chart#getView()#setViewPoint(new Coord3d(pi/2, 0, 0)); axes = chart#getAxeLayout(); axes#setXAxeLabelDisplayed(false); axes#setYAxeLabelDisplayed(false); axes#setZAxeLabelDisplayed(true); axes#setZAxeLabel(unit); axes#setXTickProvider(new StaticTickProvider(ticks)); axes#setXTickRenderer(tickLabels); axes#setYTickLabelDisplayed(false); ChartLauncher#openChart(chart); ()); plotStructure structure = case structure of Grid matrix: plotMatrix matrix; //!!! _: failWith "Cannot plot this structure (only grids implemented so far)"; esac; { newMatrixMapper, newMatrixLogMapper, newMapper, plotMatrix, plotStructure, plotBarChart }