summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/visualization/visualizers/optics/OPTICSClusterVisualization.java
diff options
context:
space:
mode:
authorErich Schubert <erich@debian.org>2012-06-30 00:55:33 +0200
committerAndrej Shadura <andrewsh@debian.org>2019-03-09 22:30:34 +0000
commit4343785ebed9d4145f417d86d581f18a0d31e4ac (patch)
tree546b0aa227d50caf4246be12f89ffcbae924f8e0 /src/de/lmu/ifi/dbs/elki/visualization/visualizers/optics/OPTICSClusterVisualization.java
parent593eae6c91717eb9f4ff5088ba460dd4210509c0 (diff)
parentace5fa7f57d49756c0e1b111a30f3b6a9436c1cb (diff)
Import Debian changes 0.5.0-1
elki (0.5.0-1) unstable; urgency=low * New upstream release: 0.5.0 final.
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/visualization/visualizers/optics/OPTICSClusterVisualization.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/visualizers/optics/OPTICSClusterVisualization.java33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/optics/OPTICSClusterVisualization.java b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/optics/OPTICSClusterVisualization.java
index f69bdc59..2369588b 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/optics/OPTICSClusterVisualization.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/optics/OPTICSClusterVisualization.java
@@ -23,8 +23,10 @@ package de.lmu.ifi.dbs.elki.visualization.visualizers.optics;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import java.util.Iterator;
+import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.batik.util.SVGConstants;
import org.w3c.dom.Element;
@@ -38,8 +40,8 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.result.HierarchicalResult;
import de.lmu.ifi.dbs.elki.result.Result;
import de.lmu.ifi.dbs.elki.result.ResultUtil;
-import de.lmu.ifi.dbs.elki.utilities.iterator.IterableIterator;
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.projector.OPTICSProjector;
import de.lmu.ifi.dbs.elki.visualization.style.StyleLibrary;
@@ -103,9 +105,8 @@ public class OPTICSClusterVisualization<D extends Distance<D>> extends AbstractO
*/
@SuppressWarnings("unchecked")
protected static Clustering<OPTICSModel> findOPTICSClustering(Result result) {
- Iterator<Clustering<?>> cs = ResultUtil.filteredResults(result, Clustering.class);
- while (cs.hasNext()) {
- Clustering<?> clus = cs.next();
+ Collection<Clustering<?>> cs = ResultUtil.filterResults(result, Clustering.class);
+ for(Clustering<?> clus : cs) {
if(clus.getToplevelClusters().size() == 0) {
continue;
}
@@ -126,7 +127,15 @@ public class OPTICSClusterVisualization<D extends Distance<D>> extends AbstractO
protected void redraw() {
makeLayerElement();
addCSSClasses();
- drawClusters(clus.getToplevelClusters(), 1);
+
+ ColorLibrary colors = context.getStyleLibrary().getColorSet(StyleLibrary.PLOT);
+ HashMap<Cluster<?>, String> colormap = new HashMap<Cluster<?>, String>();
+ int cnum = 0;
+ for (Cluster<?> c : clus.getAllClusters()) {
+ colormap.put(c, colors.getColor(cnum));
+ cnum++;
+ }
+ drawClusters(clus.getToplevelClusters(), 1, colormap);
}
/**
@@ -134,9 +143,11 @@ public class OPTICSClusterVisualization<D extends Distance<D>> extends AbstractO
*
* @param clusters Current set of clusters
* @param depth Recursion depth
+ * @param colormap Color mapping
*/
- private void drawClusters(List<Cluster<OPTICSModel>> clusters, int depth) {
+ private void drawClusters(List<Cluster<OPTICSModel>> clusters, int depth, Map<Cluster<?>,String> colormap) {
final double scale = StyleLibrary.SCALE;
+
for(Cluster<OPTICSModel> cluster : clusters) {
try {
OPTICSModel model = cluster.getModel();
@@ -145,6 +156,10 @@ public class OPTICSClusterVisualization<D extends Distance<D>> extends AbstractO
final double y = plotheight + depth * scale * 0.01;
Element e = svgp.svgLine(x1, y, x2, y);
SVGUtil.addCSSClass(e, CSS_BRACKET);
+ String color = colormap.get(cluster);
+ if (color != null) {
+ SVGUtil.setAtt(e, SVGConstants.SVG_STYLE_ATTRIBUTE, SVGConstants.CSS_STROKE_PROPERTY+":"+color);
+ }
layer.appendChild(e);
}
catch(ClassCastException e) {
@@ -153,7 +168,7 @@ public class OPTICSClusterVisualization<D extends Distance<D>> extends AbstractO
// Descend
final List<Cluster<OPTICSModel>> children = cluster.getChildren();
if(children != null) {
- drawClusters(children, depth + 1);
+ drawClusters(children, depth + 1, colormap);
}
}
}
@@ -190,7 +205,7 @@ public class OPTICSClusterVisualization<D extends Distance<D>> extends AbstractO
@Override
public void processNewResult(HierarchicalResult baseResult, Result result) {
- IterableIterator<OPTICSProjector<?>> ops = ResultUtil.filteredResults(result, OPTICSProjector.class);
+ Collection<OPTICSProjector<?>> ops = ResultUtil.filterResults(result, OPTICSProjector.class);
for(OPTICSProjector<?> p : ops) {
final Clustering<OPTICSModel> ocl = findOPTICSClustering(baseResult);
if(ocl != null) {