Search in sources :

Example 26 with VisualizationTask

use of de.lmu.ifi.dbs.elki.visualization.VisualizationTask in project elki by elki-project.

the class OverviewPlot method reinitialize.

/**
 * Refresh the overview plot.
 */
private synchronized void reinitialize() {
    if (plot == null) {
        initializePlot();
    } else {
        final ActionEvent ev = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, OVERVIEW_REFRESHING);
        for (ActionListener actionListener : actionListeners) {
            actionListener.actionPerformed(ev);
        }
    }
    // Detach existing elements:
    for (Pair<Element, Visualization> pair : vistoelem.values()) {
        SVGUtil.removeFromParent(pair.first);
    }
    plotmap = arrangeVisualizations(ratio, 1.0);
    recalcViewbox();
    final int thumbsize = (int) Math.max(screenwidth / plotmap.getWidth(), screenheight / plotmap.getHeight());
    // TODO: cancel pending thumbnail requests!
    // Replace the layer map
    LayerMap oldlayers = vistoelem;
    vistoelem = new LayerMap();
    // Redo main layers
    SVGUtil.removeFromParent(plotlayer);
    SVGUtil.removeFromParent(hoverlayer);
    plotlayer = plot.svgElement(SVGConstants.SVG_G_TAG);
    hoverlayer = plot.svgElement(SVGConstants.SVG_G_TAG);
    hoverlayer.setAttribute(SVGPlot.NO_EXPORT_ATTRIBUTE, SVGPlot.NO_EXPORT_ATTRIBUTE);
    // Redo the layout
    for (Entry<PlotItem, double[]> e : plotmap.entrySet()) {
        final double basex = e.getValue()[0];
        final double basey = e.getValue()[1];
        for (Iterator<PlotItem> iter = e.getKey().itemIterator(); iter.hasNext(); ) {
            PlotItem it = iter.next();
            boolean hasDetails = false;
            // Container element for main plot item
            Element g = plot.svgElement(SVGConstants.SVG_G_TAG);
            SVGUtil.setAtt(g, SVGConstants.SVG_TRANSFORM_ATTRIBUTE, "translate(" + (basex + it.x) + " " + (basey + it.y) + ")");
            plotlayer.appendChild(g);
            vistoelem.put(it, null, g, null);
            // Add the actual tasks:
            for (VisualizationTask task : it.tasks) {
                if (!visibleInOverview(task)) {
                    continue;
                }
                hasDetails |= !task.has(RenderFlag.NO_DETAIL);
                Pair<Element, Visualization> pair = oldlayers.remove(it, task);
                if (pair == null) {
                    pair = new Pair<>(plot.svgElement(SVGConstants.SVG_G_TAG), null);
                }
                if (pair.second == null) {
                    pair.second = embedOrThumbnail(thumbsize, it, task, pair.first);
                }
                g.appendChild(pair.first);
                vistoelem.put(it, task, pair);
            }
            // When needed, add a hover effect
            if (hasDetails && !single) {
                Element hover = plot.svgRect(basex + it.x, basey + it.y, it.w, it.h);
                SVGUtil.addCSSClass(hover, selcss.getName());
                // link hoverer.
                EventTarget targ = (EventTarget) hover;
                targ.addEventListener(SVGConstants.SVG_MOUSEOVER_EVENT_TYPE, hoverer, false);
                targ.addEventListener(SVGConstants.SVG_MOUSEOUT_EVENT_TYPE, hoverer, false);
                targ.addEventListener(SVGConstants.SVG_CLICK_EVENT_TYPE, hoverer, false);
                targ.addEventListener(SVGConstants.SVG_CLICK_EVENT_TYPE, new SelectPlotEvent(it), false);
                hoverlayer.appendChild(hover);
            }
        }
    }
    for (Pair<Element, Visualization> pair : oldlayers.values()) {
        if (pair.second != null) {
            pair.second.destroy();
        }
    }
    plot.getRoot().appendChild(plotlayer);
    plot.getRoot().appendChild(hoverlayer);
    plot.updateStyleElement();
    // Notify listeners.
    final ActionEvent ev = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, OVERVIEW_REFRESHED);
    for (ActionListener actionListener : actionListeners) {
        actionListener.actionPerformed(ev);
    }
}
Also used : Visualization(de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization) ActionEvent(java.awt.event.ActionEvent) Element(org.w3c.dom.Element) VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) ActionListener(java.awt.event.ActionListener) EventTarget(org.w3c.dom.events.EventTarget)

Example 27 with VisualizationTask

use of de.lmu.ifi.dbs.elki.visualization.VisualizationTask 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 28 with VisualizationTask

use of de.lmu.ifi.dbs.elki.visualization.VisualizationTask 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 29 with VisualizationTask

use of de.lmu.ifi.dbs.elki.visualization.VisualizationTask 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 30 with VisualizationTask

use of de.lmu.ifi.dbs.elki.visualization.VisualizationTask in project elki by elki-project.

the class UncertainInstancesVisualization method processNewResult.

@Override
public void processNewResult(VisualizerContext context, Object start) {
    VisualizationTree.findVis(context, start).filter(ScatterPlotProjector.class).forEach(p -> {
        // Find a scatter plot visualizing uncertain objects:
        Relation<?> r = p.getRelation();
        if (!UncertainObject.UNCERTAIN_OBJECT_FIELD.isAssignableFromType(r.getDataTypeInformation())) {
            return;
        }
        context.addVis(p, // 
        new VisualizationTask(this, NAME, p, r).level(// 
        VisualizationTask.LEVEL_DATA).with(UpdateFlag.ON_DATA).with(UpdateFlag.ON_SAMPLE).with(UpdateFlag.ON_STYLEPOLICY));
    });
}
Also used : VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) ScatterPlotProjector(de.lmu.ifi.dbs.elki.visualization.projector.ScatterPlotProjector)

Aggregations

VisualizationTask (de.lmu.ifi.dbs.elki.visualization.VisualizationTask)44 ScatterPlotProjector (de.lmu.ifi.dbs.elki.visualization.projector.ScatterPlotProjector)10 ParallelPlotProjector (de.lmu.ifi.dbs.elki.visualization.projector.ParallelPlotProjector)7 Visualization (de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization)7 PlotItem (de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem)6 ArrayList (java.util.ArrayList)6 Element (org.w3c.dom.Element)4 ScalesResult (de.lmu.ifi.dbs.elki.result.ScalesResult)3 Relation (de.lmu.ifi.dbs.elki.database.relation.Relation)2 AbortException (de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException)2 Projector (de.lmu.ifi.dbs.elki.visualization.projector.Projector)2 LabelVisualization (de.lmu.ifi.dbs.elki.visualization.visualizers.visunproj.LabelVisualization)2 PointerHierarchyRepresentationResult (de.lmu.ifi.dbs.elki.algorithm.clustering.hierarchical.PointerHierarchyRepresentationResult)1 ClusterOrder (de.lmu.ifi.dbs.elki.algorithm.clustering.optics.ClusterOrder)1 OPTICSXi (de.lmu.ifi.dbs.elki.algorithm.clustering.optics.OPTICSXi)1 PolygonsObject (de.lmu.ifi.dbs.elki.data.spatial.PolygonsObject)1 Database (de.lmu.ifi.dbs.elki.database.Database)1 UpdatableDatabase (de.lmu.ifi.dbs.elki.database.UpdatableDatabase)1 AffineTransformation (de.lmu.ifi.dbs.elki.math.linearalgebra.AffineTransformation)1 EvaluationResult (de.lmu.ifi.dbs.elki.result.EvaluationResult)1