Search in sources :

Example 6 with AffineTransformation

use of de.lmu.ifi.dbs.elki.math.linearalgebra.AffineTransformation in project elki by elki-project.

the class ScatterPlotProjector method arrange.

@Override
public Collection<PlotItem> arrange(VisualizerContext context) {
    List<PlotItem> layout = new ArrayList<>(1);
    List<VisualizationTask> tasks = context.getVisTasks(this);
    if (!tasks.isEmpty()) {
        ScalesResult scales = ScalesResult.getScalesResult(rel);
        final PlotItem master;
        if (dmax == 2) {
            // In 2d, make the plot twice as big.
            master = new PlotItem(2 + .1, 2 + .1, null);
            {
                Projection2D proj = new Simple2D(this, scales.getScales(), 0, 1);
                PlotItem it = new PlotItem(.1, 0, 2., 2., proj);
                it.tasks = tasks;
                master.subitems.add(it);
            }
            // Label at bottom
            {
                PlotItem it = new PlotItem(.1, 2., 2., .1, null);
                it.tasks.add(// 
                new VisualizationTask(new LabelVisualization(RelationUtil.getColumnLabel(rel, 0)), "", null, null).requestSize(2., .1).with(RenderFlag.NO_DETAIL));
                master.subitems.add(it);
            }
            // Label on left
            {
                PlotItem it = new PlotItem(0, 0, .1, 2, null);
                it.tasks.add(// 
                new VisualizationTask(new LabelVisualization(RelationUtil.getColumnLabel(rel, 1), true), "", null, null).requestSize(.1, 2.).with(RenderFlag.NO_DETAIL));
                master.subitems.add(it);
            }
        } else {
            final double sizeh = Math.ceil((dmax - 1) / 2.0);
            master = new PlotItem(sizeh * 2. + .1, dmax - 1 + .1, null);
            for (int d1 = 0; d1 < dmax - 1; d1++) {
                for (int d2 = d1 + 1; d2 < dmax; d2++) {
                    Projection2D proj = new Simple2D(this, scales.getScales(), d1, d2);
                    PlotItem it = new PlotItem(d1 + .1, d2 - 1, 1., 1., proj);
                    it.tasks = tasks;
                    master.subitems.add(it);
                }
            }
            if (dmax >= 3) {
                AffineTransformation p = AffineProjection.axisProjection(RelationUtil.dimensionality(rel), 1, 2);
                p.addRotation(0, 2, MathUtil.deg2rad(-10.));
                p.addRotation(1, 2, MathUtil.deg2rad(15.));
                // Wanna try 4d? go ahead:
                // p.addRotation(0, 3, Math.PI / 180 * -20.);
                // p.addRotation(1, 3, Math.PI / 180 * 30.);
                Projection2D proj = new AffineProjection(this, scales.getScales(), p);
                PlotItem it = new PlotItem(sizeh + .1, 0, sizeh, sizeh, proj);
                it.tasks = tasks;
                master.subitems.add(it);
            }
            // Labels at bottom
            for (int d1 = 0; d1 < dmax - 1; d1++) {
                PlotItem it = new PlotItem(d1 + .1, dmax - 1, 1., .1, null);
                it.tasks.add(// 
                new VisualizationTask(new LabelVisualization(RelationUtil.getColumnLabel(rel, d1)), "", null, null).requestSize(1, .1).with(RenderFlag.NO_DETAIL));
                master.subitems.add(it);
            }
            // Labels on left
            for (int d2 = 1; d2 < dmax; d2++) {
                PlotItem it = new PlotItem(0, d2 - 1, .1, 1, null);
                it.tasks.add(// 
                new VisualizationTask(new LabelVisualization(RelationUtil.getColumnLabel(rel, d2), true), "", null, null).requestSize(.1, 1.).with(RenderFlag.NO_DETAIL));
                master.subitems.add(it);
            }
        }
        layout.add(master);
    }
    return layout;
}
Also used : ArrayList(java.util.ArrayList) Simple2D(de.lmu.ifi.dbs.elki.visualization.projections.Simple2D) AffineProjection(de.lmu.ifi.dbs.elki.visualization.projections.AffineProjection) VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) ScalesResult(de.lmu.ifi.dbs.elki.result.ScalesResult) Projection2D(de.lmu.ifi.dbs.elki.visualization.projections.Projection2D) AffineTransformation(de.lmu.ifi.dbs.elki.math.linearalgebra.AffineTransformation) PlotItem(de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem) LabelVisualization(de.lmu.ifi.dbs.elki.visualization.visualizers.visunproj.LabelVisualization)

Aggregations

AffineTransformation (de.lmu.ifi.dbs.elki.math.linearalgebra.AffineTransformation)6 Test (org.junit.Test)4 ScalesResult (de.lmu.ifi.dbs.elki.result.ScalesResult)1 VisualizationTask (de.lmu.ifi.dbs.elki.visualization.VisualizationTask)1 PlotItem (de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem)1 AffineProjection (de.lmu.ifi.dbs.elki.visualization.projections.AffineProjection)1 Projection2D (de.lmu.ifi.dbs.elki.visualization.projections.Projection2D)1 Simple2D (de.lmu.ifi.dbs.elki.visualization.projections.Simple2D)1 LabelVisualization (de.lmu.ifi.dbs.elki.visualization.visualizers.visunproj.LabelVisualization)1 ArrayList (java.util.ArrayList)1