Search in sources :

Example 1 with PlotItem

use of de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem in project elki by elki-project.

the class OPTICSProjector method arrange.

@Override
public Collection<PlotItem> arrange(VisualizerContext context) {
    List<PlotItem> col = new ArrayList<>(1);
    List<VisualizationTask> tasks = context.getVisTasks(this);
    if (!tasks.isEmpty()) {
        final PlotItem it = new PlotItem(4., 1., new OPTICSProjection(this));
        it.tasks = tasks;
        col.add(it);
    }
    return col;
}
Also used : VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) OPTICSProjection(de.lmu.ifi.dbs.elki.visualization.projections.OPTICSProjection) ArrayList(java.util.ArrayList) PlotItem(de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem)

Example 2 with PlotItem

use of de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem in project elki by elki-project.

the class HistogramProjector method arrange.

@Override
public Collection<PlotItem> arrange(VisualizerContext context) {
    List<PlotItem> layout = new ArrayList<>(1 + dmax);
    List<VisualizationTask> tasks = context.getVisTasks(this);
    if (!tasks.isEmpty()) {
        final double xoff = (dmax > 1) ? .1 : 0.;
        final double hheight = .5;
        final double lheight = .1;
        PlotItem master = new PlotItem(dmax + xoff, hheight + lheight, null);
        ScalesResult scales = ScalesResult.getScalesResult(rel);
        for (int d1 = 0; d1 < dmax; d1++) {
            Projection1D proj = new Simple1D(this, scales.getScales(), d1);
            final PlotItem it = new PlotItem(d1 + xoff, lheight, 1., hheight, proj);
            it.tasks = tasks;
            master.subitems.add(it);
        }
        layout.add(master);
        // Add labels
        for (int d1 = 0; d1 < dmax; d1++) {
            PlotItem it = new PlotItem(d1 + xoff, 0, 1., lheight, null);
            LabelVisualization lbl = new LabelVisualization(RelationUtil.getColumnLabel(rel, d1));
            it.tasks.add(// 
            new VisualizationTask(lbl, "", null, null).requestSize(1, lheight).with(RenderFlag.NO_DETAIL));
            master.subitems.add(it);
        }
    }
    return layout;
}
Also used : VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) ScalesResult(de.lmu.ifi.dbs.elki.result.ScalesResult) Projection1D(de.lmu.ifi.dbs.elki.visualization.projections.Projection1D) ArrayList(java.util.ArrayList) Simple1D(de.lmu.ifi.dbs.elki.visualization.projections.Simple1D) PlotItem(de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem) LabelVisualization(de.lmu.ifi.dbs.elki.visualization.visualizers.visunproj.LabelVisualization)

Example 3 with PlotItem

use of de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem in project elki by elki-project.

the class ParallelPlotProjector method arrange.

@Override
public Collection<PlotItem> arrange(VisualizerContext context) {
    List<PlotItem> col = new ArrayList<>(1);
    List<VisualizationTask> tasks = context.getVisTasks(this);
    if (!tasks.isEmpty()) {
        ScalesResult scales = ScalesResult.getScalesResult(rel);
        ProjectionParallel proj = new SimpleParallel(this, scales.getScales());
        final double width = Math.max(.5, Math.ceil(MathUtil.log2(scales.getScales().length - 1)));
        final PlotItem it = new PlotItem(width, 1., proj);
        it.tasks = tasks;
        col.add(it);
    }
    return col;
}
Also used : VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) ScalesResult(de.lmu.ifi.dbs.elki.result.ScalesResult) SimpleParallel(de.lmu.ifi.dbs.elki.visualization.projections.SimpleParallel) ArrayList(java.util.ArrayList) PlotItem(de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem) ProjectionParallel(de.lmu.ifi.dbs.elki.visualization.projections.ProjectionParallel)

Example 4 with PlotItem

use of de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem 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)

Example 5 with PlotItem

use of de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem in project elki by elki-project.

the class ExportVisualizations method processItem.

private void processItem(PlotItem item) {
    // Descend into subitems
    for (Iterator<PlotItem> iter = item.subitems.iterator(); iter.hasNext(); ) {
        processItem(iter.next());
    }
    if (item.taskSize() <= 0) {
        return;
    }
    item.sort();
    final double width = item.w, height = item.h;
    VisualizationPlot svgp = new VisualizationPlot();
    svgp.getRoot().setAttribute(SVGConstants.SVG_WIDTH_ATTRIBUTE, "20cm");
    svgp.getRoot().setAttribute(SVGConstants.SVG_HEIGHT_ATTRIBUTE, (20 * height / width) + "cm");
    svgp.getRoot().setAttribute(SVGConstants.SVG_VIEW_BOX_ATTRIBUTE, "0 0 " + width + " " + height);
    ArrayList<Visualization> layers = new ArrayList<>();
    for (Iterator<VisualizationTask> iter = item.tasks.iterator(); iter.hasNext(); ) {
        VisualizationTask task = iter.next();
        if (task.has(RenderFlag.NO_DETAIL) || task.has(RenderFlag.NO_EXPORT) || !task.isVisible()) {
            continue;
        }
        try {
            Visualization v = task.getFactory().makeVisualization(context, task, svgp, width, height, item.proj);
            layers.add(v);
        } catch (Exception e) {
            if (Logging.getLogger(task.getFactory().getClass()).isDebugging()) {
                LOG.exception("Visualization failed.", e);
            } else {
                LOG.warning("Visualizer " + task.getFactory().getClass().getName() + " failed - enable debugging to see details.");
            }
        }
    }
    if (layers.isEmpty()) {
        return;
    }
    for (Visualization layer : layers) {
        if (layer.getLayer() == null) {
            LOG.warning("NULL layer seen.");
            continue;
        }
        svgp.getRoot().appendChild(layer.getLayer());
    }
    svgp.updateStyleElement();
    String prefix = null;
    prefix = (prefix == null && item.proj != null) ? item.proj.getMenuName() : prefix;
    prefix = (prefix == null && item.tasks.size() > 0) ? item.tasks.get(0).getMenuName() : prefix;
    prefix = (prefix != null ? prefix : "plot");
    // TODO: generate names...
    Integer count = counter.get(prefix);
    counter.put(prefix, count = count == null ? 1 : (count + 1));
    try {
        switch(format) {
            case SVG:
                {
                    File outname = new File(output, prefix + "-" + count + ".svg");
                    svgp.saveAsSVG(outname);
                    break;
                }
            case PNG:
                {
                    File outname = new File(output, prefix + "-" + count + ".png");
                    svgp.saveAsPNG(outname, (int) (iwidth * ratio), iwidth);
                    break;
                }
            case PDF:
                {
                    File outname = new File(output, prefix + "-" + count + ".pdf");
                    svgp.saveAsPDF(outname);
                    break;
                }
            case PS:
                {
                    File outname = new File(output, prefix + "-" + count + ".ps");
                    svgp.saveAsPS(outname);
                    break;
                }
            case EPS:
                {
                    File outname = new File(output, prefix + "-" + count + ".eps");
                    svgp.saveAsEPS(outname);
                    break;
                }
            case JPEG:
                {
                    File outname = new File(output, prefix + "-" + count + ".jpg");
                    svgp.saveAsJPEG(outname, (int) (iwidth * ratio), iwidth);
                    break;
                }
        }
    } catch (Exception e) {
        LOG.warning("Export of visualization failed.", e);
    }
    for (Visualization layer : layers) {
        layer.destroy();
    }
}
Also used : Visualization(de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization) ArrayList(java.util.ArrayList) AbortException(de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException) VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) PlotItem(de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem) VisualizationPlot(de.lmu.ifi.dbs.elki.visualization.gui.VisualizationPlot) File(java.io.File)

Aggregations

VisualizationTask (de.lmu.ifi.dbs.elki.visualization.VisualizationTask)6 PlotItem (de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem)6 ArrayList (java.util.ArrayList)5 ScalesResult (de.lmu.ifi.dbs.elki.result.ScalesResult)3 AbortException (de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException)2 LabelVisualization (de.lmu.ifi.dbs.elki.visualization.visualizers.visunproj.LabelVisualization)2 AffineTransformation (de.lmu.ifi.dbs.elki.math.linearalgebra.AffineTransformation)1 VisualizationPlot (de.lmu.ifi.dbs.elki.visualization.gui.VisualizationPlot)1 AffineProjection (de.lmu.ifi.dbs.elki.visualization.projections.AffineProjection)1 OPTICSProjection (de.lmu.ifi.dbs.elki.visualization.projections.OPTICSProjection)1 Projection1D (de.lmu.ifi.dbs.elki.visualization.projections.Projection1D)1 Projection2D (de.lmu.ifi.dbs.elki.visualization.projections.Projection2D)1 ProjectionParallel (de.lmu.ifi.dbs.elki.visualization.projections.ProjectionParallel)1 Simple1D (de.lmu.ifi.dbs.elki.visualization.projections.Simple1D)1 Simple2D (de.lmu.ifi.dbs.elki.visualization.projections.Simple2D)1 SimpleParallel (de.lmu.ifi.dbs.elki.visualization.projections.SimpleParallel)1 Projector (de.lmu.ifi.dbs.elki.visualization.projector.Projector)1 Visualization (de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization)1 File (java.io.File)1