Search in sources :

Example 1 with XYPlot

use of de.lmu.ifi.dbs.elki.math.geometry.XYPlot in project elki by elki-project.

the class XYPlotVisualization method makeVisualization.

@Override
public Visualization makeVisualization(VisualizerContext context, VisualizationTask task, VisualizationPlot plot, double width, double height, Projection proj) {
    XYPlot xyplot = task.getResult();
    setupCSS(context, plot, xyplot);
    final StyleLibrary style = context.getStyleLibrary();
    final double sizex = StyleLibrary.SCALE;
    final double sizey = StyleLibrary.SCALE * height / width;
    final double margin = style.getSize(StyleLibrary.MARGIN);
    Element layer = SVGUtil.svgElement(plot.getDocument(), SVGConstants.SVG_G_TAG);
    final String transform = SVGUtil.makeMarginTransform(width, height, sizex, sizey, margin);
    SVGUtil.setAtt(layer, SVGConstants.SVG_TRANSFORM_ATTRIBUTE, transform);
    // determine scaling
    LinearScale scalex = new LinearScale(xyplot.getMinx(), xyplot.getMaxx());
    LinearScale scaley = new LinearScale(xyplot.getMiny(), xyplot.getMaxy());
    for (XYPlot.Curve curve : xyplot) {
        // plot the line
        SVGPath path = new SVGPath();
        for (XYPlot.Curve.Itr iterator = curve.iterator(); iterator.valid(); iterator.advance()) {
            final double x = scalex.getScaled(iterator.getX());
            final double y = 1 - scaley.getScaled(iterator.getY());
            path.drawTo(sizex * x, sizey * y);
        }
        Element line = path.makeElement(plot);
        line.setAttribute(SVGConstants.SVG_CLASS_ATTRIBUTE, SERIESID + curve.getColor());
        layer.appendChild(line);
    }
    // add axes
    try {
        SVGSimpleLinearAxis.drawAxis(plot, layer, scaley, 0, sizey, 0, 0, SVGSimpleLinearAxis.LabelStyle.LEFTHAND, style);
        SVGSimpleLinearAxis.drawAxis(plot, layer, scalex, 0, sizey, sizex, sizey, SVGSimpleLinearAxis.LabelStyle.RIGHTHAND, style);
    } catch (CSSNamingConflict e) {
        LoggingUtil.exception(e);
    }
    // Add axis labels
    {
        Element labelx = plot.svgText(sizex * .5, sizey + margin * .9, xyplot.getLabelx());
        SVGUtil.setCSSClass(labelx, CSS_AXIS_LABEL);
        layer.appendChild(labelx);
        Element labely = plot.svgText(margin * -.8, sizey * .5, xyplot.getLabely());
        SVGUtil.setCSSClass(labely, CSS_AXIS_LABEL);
        SVGUtil.setAtt(labely, SVGConstants.SVG_TRANSFORM_ATTRIBUTE, "rotate(-90," + FormatUtil.NF6.format(margin * -.8) + "," + FormatUtil.NF6.format(sizey * .5) + ")");
        layer.appendChild(labely);
    }
    return new StaticVisualizationInstance(context, task, plot, width, height, layer);
}
Also used : LinearScale(de.lmu.ifi.dbs.elki.math.scales.LinearScale) XYPlot(de.lmu.ifi.dbs.elki.math.geometry.XYPlot) CSSNamingConflict(de.lmu.ifi.dbs.elki.visualization.css.CSSClassManager.CSSNamingConflict) Element(org.w3c.dom.Element) StyleLibrary(de.lmu.ifi.dbs.elki.visualization.style.StyleLibrary) SVGPath(de.lmu.ifi.dbs.elki.visualization.svg.SVGPath) StaticVisualizationInstance(de.lmu.ifi.dbs.elki.visualization.visualizers.StaticVisualizationInstance)

Example 2 with XYPlot

use of de.lmu.ifi.dbs.elki.math.geometry.XYPlot in project elki by elki-project.

the class XYPlotVisualization method setupCSS.

/**
 * Setup the CSS classes for the plot.
 *
 * @param svgp Plot
 * @param plot Plot to render
 */
private void setupCSS(VisualizerContext context, SVGPlot svgp, XYPlot plot) {
    StyleLibrary style = context.getStyleLibrary();
    for (XYPlot.Curve curve : plot) {
        CSSClass csscls = new CSSClass(this, SERIESID + curve.getColor());
        // csscls.setStatement(SVGConstants.SVG_STROKE_WIDTH_ATTRIBUTE, "0.2%");
        csscls.setStatement(SVGConstants.SVG_FILL_ATTRIBUTE, SVGConstants.SVG_NONE_VALUE);
        style.lines().formatCSSClass(csscls, curve.getColor(), style.getLineWidth(StyleLibrary.XYCURVE));
        svgp.addCSSClassOrLogError(csscls);
    }
    // Axis label
    CSSClass label = new CSSClass(this, CSS_AXIS_LABEL);
    label.setStatement(SVGConstants.CSS_FILL_PROPERTY, style.getTextColor(StyleLibrary.XYCURVE));
    label.setStatement(SVGConstants.CSS_FONT_FAMILY_PROPERTY, style.getFontFamily(StyleLibrary.XYCURVE));
    label.setStatement(SVGConstants.CSS_FONT_SIZE_PROPERTY, style.getTextSize(StyleLibrary.XYCURVE));
    label.setStatement(SVGConstants.CSS_TEXT_ANCHOR_PROPERTY, SVGConstants.CSS_MIDDLE_VALUE);
    svgp.addCSSClassOrLogError(label);
    svgp.updateStyleElement();
}
Also used : XYPlot(de.lmu.ifi.dbs.elki.math.geometry.XYPlot) StyleLibrary(de.lmu.ifi.dbs.elki.visualization.style.StyleLibrary) CSSClass(de.lmu.ifi.dbs.elki.visualization.css.CSSClass)

Aggregations

XYPlot (de.lmu.ifi.dbs.elki.math.geometry.XYPlot)2 StyleLibrary (de.lmu.ifi.dbs.elki.visualization.style.StyleLibrary)2 LinearScale (de.lmu.ifi.dbs.elki.math.scales.LinearScale)1 CSSClass (de.lmu.ifi.dbs.elki.visualization.css.CSSClass)1 CSSNamingConflict (de.lmu.ifi.dbs.elki.visualization.css.CSSClassManager.CSSNamingConflict)1 SVGPath (de.lmu.ifi.dbs.elki.visualization.svg.SVGPath)1 StaticVisualizationInstance (de.lmu.ifi.dbs.elki.visualization.visualizers.StaticVisualizationInstance)1 Element (org.w3c.dom.Element)1