diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/visualization/projections')
10 files changed, 169 insertions, 73 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/AbstractFullProjection.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/AbstractFullProjection.java index 6b08f033..e8f7a91a 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/projections/AbstractFullProjection.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/AbstractFullProjection.java @@ -52,12 +52,12 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen * @return vector in scaled space */ @Override - public Vector projectDataToScaledSpace(NumberVector<?, ?> data) { + public Vector projectDataToScaledSpace(NumberVector<?> data) { final int dim = data.getDimensionality(); Vector vec = new Vector(dim); double[] ds = vec.getArrayRef(); for(int d = 0; d < dim; d++) { - ds[d] = scales[d].getScaled(data.doubleValue(d + 1)); + ds[d] = scales[d].getScaled(data.doubleValue(d)); } return vec; } @@ -86,12 +86,12 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen * @return relative vector in scaled space */ @Override - public Vector projectRelativeDataToScaledSpace(NumberVector<?, ?> data) { + public Vector projectRelativeDataToScaledSpace(NumberVector<?> data) { final int dim = data.getDimensionality(); Vector vec = new Vector(dim); double[] ds = vec.getArrayRef(); for(int d = 0; d < dim; d++) { - ds[d] = scales[d].getRelativeScaled(data.doubleValue(d + 1)); + ds[d] = scales[d].getRelativeScaled(data.doubleValue(d)); } return vec; } @@ -120,7 +120,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen * @return vector in rendering space */ @Override - public Vector projectDataToRenderSpace(NumberVector<?, ?> data) { + public Vector projectDataToRenderSpace(NumberVector<?> data) { return projectScaledToRender(projectDataToScaledSpace(data)); } @@ -142,7 +142,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen * @return relative vector in rendering space */ @Override - public Vector projectRelativeDataToRenderSpace(NumberVector<?, ?> data) { + public Vector projectRelativeDataToRenderSpace(NumberVector<?> data) { return projectRelativeScaledToRender(projectRelativeDataToScaledSpace(data)); } @@ -166,7 +166,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen * @return vector in data space */ @Override - public <NV extends NumberVector<NV, ?>> NV projectScaledToDataSpace(Vector v, NV factory) { + public <NV extends NumberVector<?>> NV projectScaledToDataSpace(Vector v, NumberVector.Factory<NV, ?> factory) { final int dim = v.getDimensionality(); Vector vec = v.copy(); double[] ds = vec.getArrayRef(); @@ -185,7 +185,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen * @return vector in data space */ @Override - public <NV extends NumberVector<NV, ?>> NV projectRenderToDataSpace(Vector v, NV prototype) { + public <NV extends NumberVector<?>> NV projectRenderToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype) { final int dim = v.getDimensionality(); Vector vec = projectRenderToScaled(v); double[] ds = vec.getArrayRef(); @@ -206,7 +206,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen * @return relative vector in data space */ @Override - public <NV extends NumberVector<NV, ?>> NV projectRelativeScaledToDataSpace(Vector v, NV prototype) { + public <NV extends NumberVector<?>> NV projectRelativeScaledToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype) { final int dim = v.getDimensionality(); Vector vec = v.copy(); double[] ds = vec.getArrayRef(); @@ -225,7 +225,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen * @return relative vector in data space */ @Override - public <NV extends NumberVector<NV, ?>> NV projectRelativeRenderToDataSpace(Vector v, NV prototype) { + public <NV extends NumberVector<?>> NV projectRelativeRenderToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype) { final int dim = v.getDimensionality(); Vector vec = projectRelativeRenderToScaled(v); double[] ds = vec.getArrayRef(); diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/AffineProjection.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/AffineProjection.java index 10533ee0..0e184e32 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/projections/AffineProjection.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/AffineProjection.java @@ -109,7 +109,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti @Override public CanvasSize estimateViewport() { - if(viewport == null) { + if (viewport == null) { final int dim = proj.getDimensionality(); DoubleMinMax minmaxx = new DoubleMinMax(); DoubleMinMax minmaxy = new DoubleMinMax(); @@ -121,14 +121,14 @@ public class AffineProjection extends AbstractFullProjection implements Projecti minmaxy.put(orig.get(1)); // Diagonal point Vector diag = new Vector(dim); - for(int d2 = 0; d2 < dim; d2++) { + for (int d2 = 0; d2 < dim; d2++) { diag.set(d2, 1); } diag = projectScaledToRender(diag); minmaxx.put(diag.get(0)); minmaxy.put(diag.get(1)); // Axis end points - for(int d = 0; d < dim; d++) { + for (int d = 0; d < dim; d++) { Vector v = new Vector(dim); v.set(d, 1); Vector ax = projectScaledToRender(v); @@ -154,7 +154,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti AffineTransformation proj = AffineTransformation.reorderAxesTransformation(dim, new int[] { ax1, ax2 }); // Assuming that the data was normalized on [0:1], center it: double[] trans = new double[dim]; - for(int i = 0; i < dim; i++) { + for (int i = 0; i < dim; i++) { trans[i] = -.5; } proj.addTranslation(new Vector(trans)); @@ -173,7 +173,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti } @Override - public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> data) { + public double[] fastProjectDataToRenderSpace(NumberVector<?> data) { return fastProjectScaledToRenderSpace(fastProjectDataToScaledSpace(data)); } @@ -184,7 +184,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti } @Override - public double[] fastProjectDataToScaledSpace(NumberVector<?, ?> data) { + public double[] fastProjectDataToScaledSpace(NumberVector<?> data) { // FIXME: implement with less objects? return projectDataToScaledSpace(data).getArrayRef(); } @@ -201,7 +201,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti final double[] cols = matrix[vr.length]; assert (colx.length == coly.length && colx.length == cols.length && cols.length == vr.length + 1); - for(int k = 0; k < vr.length; k++) { + for (int k = 0; k < vr.length; k++) { x += colx[k] * vr[k]; y += coly[k] * vr[k]; s += cols[k] * vr[k]; @@ -210,7 +210,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti x += colx[vr.length]; y += coly[vr.length]; s += cols[vr.length]; - assert (s != 0.0); + assert (s > 0.0 || s < 0.0); return new double[] { x / s, y / s }; } @@ -221,7 +221,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti } @Override - public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data) { + public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?> data) { // FIXME: implement with less objects? return fastProjectRelativeScaledToRenderSpace(projectRelativeDataToScaledSpace(data).getArrayRef()); } @@ -236,7 +236,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti final double[] coly = matrix[1]; assert (colx.length == coly.length); - for(int k = 0; k < vr.length; k++) { + for (int k = 0; k < vr.length; k++) { x += colx[k] * vr[k]; y += coly[k] * vr[k]; } @@ -246,7 +246,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti @Override public double[] fastProjectRenderToDataSpace(double[] data) { double[] ret = fastProjectRenderToScaledSpace(data); - for(int d = 0; d < scales.length; d++) { + for (int d = 0; d < scales.length; d++) { ret[d] = scales[d].getUnscaled(ret[d]); } return ret; @@ -254,11 +254,11 @@ public class AffineProjection extends AbstractFullProjection implements Projecti @Override public double[] fastProjectRenderToScaledSpace(double[] v) { - if(v.length == scales.length) { + if (v.length == scales.length) { return projectRenderToScaled(new Vector(v)).getArrayRef(); } double[] c = Arrays.copyOf(v, scales.length); - for(int d = v.length; d < scales.length; d++) { + for (int d = v.length; d < scales.length; d++) { c[d] = 0.5; } return projectRenderToScaled(new Vector(c)).getArrayRef(); @@ -269,16 +269,16 @@ public class AffineProjection extends AbstractFullProjection implements Projecti final int dim = proj.getDimensionality(); BitSet actDim = new BitSet(dim); Vector vScale = new Vector(dim); - for(int d = 0; d < dim; d++) { + for (int d = 0; d < dim; d++) { vScale.setZero(); vScale.set(d, 1); double[] vRender = fastProjectScaledToRenderSpace(vScale.getArrayRef()); // TODO: Can't we do this by inspecting the projection matrix directly? - if(vRender[0] != 0.0 || vRender[1] != 0) { + if (vRender[0] > 0.0 || vRender[0] < 0.0 || vRender[1] != 0) { actDim.set(d); } } return actDim; } -}
\ No newline at end of file +} diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/FullProjection.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/FullProjection.java index cc1433aa..02705355 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/projections/FullProjection.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/FullProjection.java @@ -24,7 +24,6 @@ package de.lmu.ifi.dbs.elki.visualization.projections; */ import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; -import de.lmu.ifi.dbs.elki.visualization.projections.Projection; /** * Full vector space projections. @@ -44,7 +43,7 @@ public interface FullProjection extends Projection { * @param v vector in scaled space * @return vector in rendering space */ - public Vector projectScaledToRender(Vector v); + Vector projectScaledToRender(Vector v); /** * Project a vector from rendering space to scaled space. @@ -52,7 +51,7 @@ public interface FullProjection extends Projection { * @param v vector in rendering space * @return vector in scaled space */ - public Vector projectRenderToScaled(Vector v); + Vector projectRenderToScaled(Vector v); /** * Project a relative vector from scaled space to rendering space. @@ -60,7 +59,7 @@ public interface FullProjection extends Projection { * @param v relative vector in scaled space * @return relative vector in rendering space */ - public Vector projectRelativeScaledToRender(Vector v); + Vector projectRelativeScaledToRender(Vector v); /** * Project a relative vector from rendering space to scaled space. @@ -68,7 +67,7 @@ public interface FullProjection extends Projection { * @param v relative vector in rendering space * @return relative vector in scaled space */ - public Vector projectRelativeRenderToScaled(Vector v); + Vector projectRelativeRenderToScaled(Vector v); /** * Project a data vector from data space to scaled space. @@ -76,7 +75,7 @@ public interface FullProjection extends Projection { * @param data vector in data space * @return vector in scaled space */ - public Vector projectDataToScaledSpace(NumberVector<?, ?> data); + Vector projectDataToScaledSpace(NumberVector<?> data); /** * Project a data vector from data space to scaled space. @@ -84,7 +83,7 @@ public interface FullProjection extends Projection { * @param data vector in data space * @return vector in scaled space */ - public Vector projectDataToScaledSpace(Vector data); + Vector projectDataToScaledSpace(Vector data); /** * Project a relative data vector from data space to scaled space. @@ -92,7 +91,7 @@ public interface FullProjection extends Projection { * @param data relative vector in data space * @return relative vector in scaled space */ - public Vector projectRelativeDataToScaledSpace(NumberVector<?, ?> data); + Vector projectRelativeDataToScaledSpace(NumberVector<?> data); /** * Project a relative data vector from data space to scaled space. @@ -100,7 +99,7 @@ public interface FullProjection extends Projection { * @param data relative vector in data space * @return relative vector in scaled space */ - public Vector projectRelativeDataToScaledSpace(Vector data); + Vector projectRelativeDataToScaledSpace(Vector data); /** * Project a data vector from data space to rendering space. @@ -108,7 +107,7 @@ public interface FullProjection extends Projection { * @param data vector in data space * @return vector in rendering space */ - public Vector projectDataToRenderSpace(NumberVector<?, ?> data); + Vector projectDataToRenderSpace(NumberVector<?> data); /** * Project a data vector from data space to rendering space. @@ -116,7 +115,7 @@ public interface FullProjection extends Projection { * @param data vector in data space * @return vector in rendering space */ - public Vector projectDataToRenderSpace(Vector data); + Vector projectDataToRenderSpace(Vector data); /** * Project a vector from scaled space to data space. @@ -126,7 +125,7 @@ public interface FullProjection extends Projection { * @param factory Object factory * @return vector in data space */ - public <NV extends NumberVector<NV, ?>> NV projectScaledToDataSpace(Vector v, NV factory); + <NV extends NumberVector<?>> NV projectScaledToDataSpace(Vector v, NumberVector.Factory<NV, ?> factory); /** * Project a vector from rendering space to data space. @@ -136,7 +135,7 @@ public interface FullProjection extends Projection { * @param prototype Object factory * @return vector in data space */ - public <NV extends NumberVector<NV, ?>> NV projectRenderToDataSpace(Vector v, NV prototype); + <NV extends NumberVector<?>> NV projectRenderToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype); /** * Project a relative data vector from data space to rendering space. @@ -144,7 +143,7 @@ public interface FullProjection extends Projection { * @param data relative vector in data space * @return relative vector in rendering space */ - public Vector projectRelativeDataToRenderSpace(NumberVector<?, ?> data); + Vector projectRelativeDataToRenderSpace(NumberVector<?> data); /** * Project a relative data vector from data space to rendering space. @@ -152,7 +151,7 @@ public interface FullProjection extends Projection { * @param data relative vector in data space * @return relative vector in rendering space */ - public Vector projectRelativeDataToRenderSpace(Vector data); + Vector projectRelativeDataToRenderSpace(Vector data); /** * Project a relative vector from scaled space to data space. @@ -162,7 +161,7 @@ public interface FullProjection extends Projection { * @param prototype Object factory * @return relative vector in data space */ - public <NV extends NumberVector<NV, ?>> NV projectRelativeScaledToDataSpace(Vector v, NV prototype); + <NV extends NumberVector<?>> NV projectRelativeScaledToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype); /** * Project a relative vector from rendering space to data space. @@ -172,5 +171,5 @@ public interface FullProjection extends Projection { * @param prototype Object factory * @return relative vector in data space */ - public <NV extends NumberVector<NV, ?>> NV projectRelativeRenderToDataSpace(Vector v, NV prototype); + <NV extends NumberVector<?>> NV projectRelativeRenderToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype); } diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/OPTICSProjection.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/OPTICSProjection.java new file mode 100644 index 00000000..9a6dd9b8 --- /dev/null +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/OPTICSProjection.java @@ -0,0 +1,94 @@ +package de.lmu.ifi.dbs.elki.visualization.projections; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2012 + 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 de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; +import de.lmu.ifi.dbs.elki.math.scales.LinearScale; +import de.lmu.ifi.dbs.elki.result.AbstractHierarchicalResult; +import de.lmu.ifi.dbs.elki.result.optics.ClusterOrderResult; +import de.lmu.ifi.dbs.elki.visualization.VisualizerContext; +import de.lmu.ifi.dbs.elki.visualization.opticsplot.OPTICSPlot; +import de.lmu.ifi.dbs.elki.visualization.projector.OPTICSProjector; + +/** + * OPTICS projection. This is not really needed, but a quick hack to have more + * consistency in the visualizer API. + * + * @author Erich Schubert + */ +public class OPTICSProjection<D extends Distance<D>> extends AbstractHierarchicalResult implements Projection { + /** + * The projector we were generated from. + */ + OPTICSProjector<D> projector; + + /** + * Constructor. + * + * @param opticsProjector OPTICS projector + */ + public OPTICSProjection(OPTICSProjector<D> opticsProjector) { + super(); + this.projector = opticsProjector; + } + + @Override + public String getLongName() { + return "OPTICS projection"; + } + + @Override + public String getShortName() { + return "OPTICSproj"; + } + + @Override + public int getInputDimensionality() { + return -1; + } + + @Override + public LinearScale getScale(int d) { + return null; + } + + /** + * Get or produce the actual OPTICS plot. + * + * @param context Context to use + * @return Plot + */ + public OPTICSPlot<D> getOPTICSPlot(VisualizerContext context) { + return projector.getOPTICSPlot(context); + } + + /** + * Get the OPTICS cluster order. + * + * @return Cluster oder result. + */ + public ClusterOrderResult<D> getResult() { + return projector.getResult(); + } +} diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection1D.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection1D.java index 2232e0b9..82c9483d 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection1D.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection1D.java @@ -48,7 +48,7 @@ public interface Projection1D extends Projection { * @param data vector in data space * @return vector in rendering space */ - public double fastProjectDataToRenderSpace(NumberVector<?, ?> data); + public double fastProjectDataToRenderSpace(NumberVector<?> data); /** * Project a vector from scaled space to rendering space. @@ -72,7 +72,7 @@ public interface Projection1D extends Projection { * @param data vector in data space * @return vector in rendering space */ - public double fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data); + public double fastProjectRelativeDataToRenderSpace(NumberVector<?> data); /** * Project a vector from scaled space to rendering space. diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection2D.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection2D.java index 66518c8f..acd4a829 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection2D.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection2D.java @@ -34,6 +34,8 @@ import de.lmu.ifi.dbs.elki.data.NumberVector; * @author Erich Schubert * * @apiviz.landmark + * + * @apiviz.has CanvasSize */ public interface Projection2D extends Projection { /** @@ -50,7 +52,7 @@ public interface Projection2D extends Projection { * @param data vector in data space * @return vector in rendering space */ - public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> data); + public double[] fastProjectDataToRenderSpace(NumberVector<?> data); /** * Project a data vector from data space to scaled space. @@ -66,7 +68,7 @@ public interface Projection2D extends Projection { * @param data vector in data space * @return vector in scaled space */ - public double[] fastProjectDataToScaledSpace(NumberVector<?, ?> data); + public double[] fastProjectDataToScaledSpace(NumberVector<?> data); /** * Project a vector from scaled space to rendering space. @@ -91,7 +93,7 @@ public interface Projection2D extends Projection { * @param prototype Prototype to create vector from * @return vector in data space */ - // public <V extends NumberVector<V, ?>> V fastProjectRenderToDataSpace(double[] data, V prototype); + // public <V extends NumberVector<?>> V fastProjectRenderToDataSpace(double[] data, V prototype); /** * Project a vector from rendering space to scaled space. @@ -115,7 +117,7 @@ public interface Projection2D extends Projection { * @param data vector in data space * @return vector in rendering space */ - public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data); + public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?> data); /** * Project a vector from scaled space to rendering space. @@ -140,4 +142,4 @@ public interface Projection2D extends Projection { * @return Bit set, first dimension is bit 0. */ public BitSet getVisibleDimensions2D(); -}
\ No newline at end of file +} diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java index 03e8a245..98c2ac33 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java @@ -166,7 +166,7 @@ public interface ProjectionParallel extends Projection { * @param v Input vector
* @return Vector with reordering, inversions and scales applied.
*/
- public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> v);
+ public double[] fastProjectDataToRenderSpace(NumberVector<?> v);
/**
* Project the value of a single axis to its display value
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple1D.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple1D.java index b701c934..ef97fe15 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple1D.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple1D.java @@ -42,11 +42,11 @@ public class Simple1D extends AbstractSimpleProjection implements Projection1D { * Simple 1D projection using scaling only. * * @param scales Scales to use - * @param dnum Dimension (starting at 1) + * @param dnum Dimension (starting at 0) */ public Simple1D(LinearScale[] scales, int dnum) { super(scales); - this.dnum = dnum - 1; + this.dnum = dnum; } @Override @@ -55,8 +55,8 @@ public class Simple1D extends AbstractSimpleProjection implements Projection1D { } @Override - public double fastProjectDataToRenderSpace(NumberVector<?, ?> data) { - return (scales[dnum].getScaled(data.doubleValue(dnum + 1)) - 0.5) * SCALE; + public double fastProjectDataToRenderSpace(NumberVector<?> data) { + return (scales[dnum].getScaled(data.doubleValue(dnum)) - 0.5) * SCALE; } @Override @@ -70,7 +70,7 @@ public class Simple1D extends AbstractSimpleProjection implements Projection1D { } @Override - public double fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data) { + public double fastProjectRelativeDataToRenderSpace(NumberVector<?> data) { return (data.doubleValue(dnum) - 0.5) * SCALE; } diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple2D.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple2D.java index 1964f12b..81821a7c 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple2D.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple2D.java @@ -54,8 +54,8 @@ public class Simple2D extends AbstractSimpleProjection implements Projection2D { */ public Simple2D(LinearScale[] scales, int ax1, int ax2) { super(scales); - this.dim1 = ax1 - 1; - this.dim2 = ax2 - 1; + this.dim1 = ax1; + this.dim2 = ax2; } @Override @@ -66,9 +66,9 @@ public class Simple2D extends AbstractSimpleProjection implements Projection2D { } @Override - public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> data) { - double x = (scales[dim1].getScaled(data.doubleValue(dim1 + 1)) - 0.5) * SCALE; - double y = (scales[dim2].getScaled(data.doubleValue(dim2 + 1)) - 0.5) * -SCALE; + public double[] fastProjectDataToRenderSpace(NumberVector<?> data) { + double x = (scales[dim1].getScaled(data.doubleValue(dim1)) - 0.5) * SCALE; + double y = (scales[dim2].getScaled(data.doubleValue(dim2)) - 0.5) * -SCALE; return new double[] { x, y }; } @@ -83,11 +83,11 @@ public class Simple2D extends AbstractSimpleProjection implements Projection2D { } @Override - public double[] fastProjectDataToScaledSpace(NumberVector<?, ?> data) { + public double[] fastProjectDataToScaledSpace(NumberVector<?> data) { final int dim = data.getDimensionality(); double[] ds = new double[dim]; for(int d = 0; d < dim; d++) { - ds[d] = scales[d].getScaled(data.doubleValue(d + 1)); + ds[d] = scales[d].getScaled(data.doubleValue(d)); } return ds; } @@ -141,9 +141,9 @@ public class Simple2D extends AbstractSimpleProjection implements Projection2D { } @Override - public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data) { - double x = scales[dim1].getRelativeScaled(data.doubleValue(dim1 + 1)) * SCALE; - double y = scales[dim2].getRelativeScaled(data.doubleValue(dim2 + 1)) * -SCALE; + public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?> data) { + double x = scales[dim1].getRelativeScaled(data.doubleValue(dim1)) * SCALE; + double y = scales[dim2].getRelativeScaled(data.doubleValue(dim2)) * -SCALE; return new double[] { x, y }; } diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/SimpleParallel.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/SimpleParallel.java index c843d61d..6b07895d 100644 --- a/src/de/lmu/ifi/dbs/elki/visualization/projections/SimpleParallel.java +++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/SimpleParallel.java @@ -182,12 +182,13 @@ public class SimpleParallel extends BasicResult implements ProjectionParallel { @Override
public int getDimForVisibleAxis(int pos) {
for(int i = 0; i < scales.length; i++) {
- if (isAxisVisible(i)) {
- if (pos == 0) {
- return dimOrder[i];
- }
- pos--;
+ if (isDimHidden(dimOrder[i])) {
+ continue;
+ }
+ if (pos == 0) {
+ return dimOrder[i];
}
+ pos--;
}
return -1;
}
@@ -214,14 +215,14 @@ public class SimpleParallel extends BasicResult implements ProjectionParallel { }
@Override
- public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> data) {
+ public double[] fastProjectDataToRenderSpace(NumberVector<?> data) {
double[] v = new double[visDims];
for(int j = 0, o = 0; j < scales.length; j++) {
if(isDimHidden(j)) {
continue;
}
int i = dimOrder[j];
- v[o] = scales[i].getScaled(data.doubleValue(i + 1));
+ v[o] = scales[i].getScaled(data.doubleValue(i));
if(!isDimInverted(i)) {
v[o] = 1 - v[o];
}
|