diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/visualization/visualizers/vis2d/BubbleVisualization.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/visualization/visualizers/vis2d/BubbleVisualization.java | 82 |
1 files changed, 44 insertions, 38 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/vis2d/BubbleVisualization.java b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/vis2d/BubbleVisualization.java index 843dd39e..3d183a88 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/vis2d/BubbleVisualization.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/vis2d/BubbleVisualization.java @@ -1,26 +1,27 @@ package de.lmu.ifi.dbs.elki.visualization.visualizers.vis2d; -/* -This file is part of ELKI: -Environment for Developing KDD-Applications Supported by Index-Structures - -Copyright (C) 2011 -Ludwig-Maximilians-Universität München -Lehr- und Forschungseinheit für Datenbanksysteme -ELKI Development Team - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2011 + Ludwig-Maximilians-Universität München + Lehr- und Forschungseinheit für Datenbanksysteme + ELKI Development Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ import java.util.Iterator; import java.util.List; @@ -35,7 +36,6 @@ import de.lmu.ifi.dbs.elki.data.model.Model; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreEvent; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreListener; import de.lmu.ifi.dbs.elki.database.ids.DBID; -import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.result.HierarchicalResult; import de.lmu.ifi.dbs.elki.result.Result; import de.lmu.ifi.dbs.elki.result.ResultUtil; @@ -49,17 +49,15 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter; import de.lmu.ifi.dbs.elki.utilities.scaling.ScalingFunction; import de.lmu.ifi.dbs.elki.utilities.scaling.outlier.OutlierScalingFunction; +import de.lmu.ifi.dbs.elki.visualization.VisualizationTask; import de.lmu.ifi.dbs.elki.visualization.colors.ColorLibrary; import de.lmu.ifi.dbs.elki.visualization.css.CSSClass; -import de.lmu.ifi.dbs.elki.visualization.projections.Projection; -import de.lmu.ifi.dbs.elki.visualization.projections.Projection2D; +import de.lmu.ifi.dbs.elki.visualization.projector.ScatterPlotProjector; import de.lmu.ifi.dbs.elki.visualization.style.StyleLibrary; import de.lmu.ifi.dbs.elki.visualization.svg.SVGPlot; import de.lmu.ifi.dbs.elki.visualization.svg.SVGUtil; import de.lmu.ifi.dbs.elki.visualization.visualizers.AbstractVisFactory; import de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization; -import de.lmu.ifi.dbs.elki.visualization.visualizers.VisualizationTask; -import de.lmu.ifi.dbs.elki.visualization.visualizers.VisualizerUtil; /** * Generates a SVG-Element containing bubbles. A Bubble is a circle visualizing @@ -133,7 +131,7 @@ public class BubbleVisualization<NV extends NumberVector<NV, ?>> extends P2DVisu for(DBID objId : clus.getIDs()) { final Double radius = getScaledForId(objId); if(radius > 0.01) { - final NV vec = rep.get(objId); + final NV vec = rel.get(objId); if(vec != null) { double[] v = proj.fastProjectDataToRenderSpace(vec); Element circle = svgp.svgCircle(v[0], v[1], radius * bubble_size); @@ -146,7 +144,7 @@ public class BubbleVisualization<NV extends NumberVector<NV, ?>> extends P2DVisu } @Override - public void contentChanged(@SuppressWarnings("unused") DataStoreEvent e) { + public void contentChanged(DataStoreEvent e) { synchronizedRedraw(); } @@ -273,22 +271,30 @@ public class BubbleVisualization<NV extends NumberVector<NV, ?>> extends P2DVisu @Override public void processNewResult(HierarchicalResult baseResult, Result result) { - Iterator<Relation<? extends NumberVector<?, ?>>> reps = VisualizerUtil.iterateVectorFieldRepresentations(baseResult); - for(Relation<? extends NumberVector<?, ?>> rep : IterableUtil.fromIterator(reps)) { - List<OutlierResult> ors = ResultUtil.filterResults(result, OutlierResult.class); - for(OutlierResult o : ors) { - final VisualizationTask task = new VisualizationTask(NAME, o, rep, this, P2DVisualization.class); + List<OutlierResult> ors = ResultUtil.filterResults(result, OutlierResult.class); + for(OutlierResult o : ors) { + Iterator<ScatterPlotProjector<?>> ps = ResultUtil.filteredResults(baseResult, ScatterPlotProjector.class); + boolean vis = true; + // Quick and dirty hack: hide if parent result is also an outlier result + // Since that probably is already visible and we're redundant. + for(Result r : o.getHierarchy().getParents(o)) { + if(r instanceof OutlierResult) { + vis = false; + break; + } + } + for(ScatterPlotProjector<?> p : IterableUtil.fromIterator(ps)) { + final VisualizationTask task = new VisualizationTask(NAME, o, p.getRelation(), this); task.put(VisualizationTask.META_LEVEL, VisualizationTask.LEVEL_DATA); + if(!vis) { + task.put(VisualizationTask.META_VISIBLE_DEFAULT, false); + } baseResult.getHierarchy().add(o, task); + baseResult.getHierarchy().add(p, task); } } } - @Override - public Class<? extends Projection> getProjectionType() { - return Projection2D.class; - } - /** * Parameterization class. * |