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;
}
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;
}
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;
}
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;
}
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();
}
}
Aggregations