Search in sources :

Example 1 with LineAndPointFormatter

use of com.androidplot.xy.LineAndPointFormatter in project Sprog-App by PaulKlinger.

the class Graphs method initGraph.

public static void initGraph(Context context, XYPlot plot, List<Number> xs, List<Number> ys, int type, int yStep) {
    XYSeries data = new SimpleXYSeries(xs, ys, "");
    if (type == BAR) {
        BarFormatter formatter = new BarFormatter(ContextCompat.getColor(context, R.color.colorGraph), Color.TRANSPARENT);
        formatter.setLegendIconEnabled(false);
        plot.addSeries(data, formatter);
        BarRenderer br = plot.getRenderer(BarRenderer.class);
        br.setBarGroupWidth(BarRenderer.BarGroupWidthMode.FIXED_GAP, 2);
        plot.getGraph().getDomainGridLinePaint().setColor(Color.TRANSPARENT);
    } else if (type == LINE) {
        LineAndPointFormatter formatter = new LineAndPointFormatter(ContextCompat.getColor(context, R.color.colorGraph), Color.TRANSPARENT, Color.TRANSPARENT, null);
        formatter.setLegendIconEnabled(false);
        plot.addSeries(data, formatter);
    } else {
        throw new UnsupportedOperationException();
    }
    plot.setDomainBoundaries((int) xs.get(xs.size() - 1) - Util.getDisplayWidthDp(context) / 20, xs.get(xs.size() - 1).intValue() + 0.5, BoundaryMode.FIXED);
    int maxy = Stream.of(ys).mapToInt(n -> n.intValue()).max().orElse(0);
    plot.setRangeBoundaries(0, maxy, BoundaryMode.FIXED);
    PanZoom panZoom = PanZoom.attach(plot);
    panZoom.setPan(PanZoom.Pan.HORIZONTAL);
    panZoom.setZoom(PanZoom.Zoom.NONE);
    plot.getOuterLimits().set((int) xs.get(0) - 1, xs.get(xs.size() - 1).intValue() + 0.5, -10, maxy);
    plot.getGraph().setLineLabelEdges(XYGraphWidget.Edge.BOTTOM, XYGraphWidget.Edge.LEFT);
    plot.getGraph().getLineLabelStyle(XYGraphWidget.Edge.BOTTOM).setFormat(new NumberFormat() {

        @Override
        public StringBuffer format(long val, StringBuffer buffer, FieldPosition pos) {
            return null;
        }

        @Override
        public Number parse(String source, ParsePosition parsePosition) {
            return null;
        }

        @Override
        public StringBuffer format(double val, StringBuffer buffer, FieldPosition pos) {
            int year = (int) val / 12;
            int month = (int) val % 12 + 1;
            if (month == 1) {
                return new StringBuffer(String.format("%d-%d", year, month));
            } else {
                return new StringBuffer(String.format("%d", month));
            }
        }
    });
    plot.getGraph().getLineLabelStyle(XYGraphWidget.Edge.LEFT).setFormat(new NumberFormat() {

        @Override
        public StringBuffer format(long obj, StringBuffer buffer, FieldPosition pos) {
            return null;
        }

        @Override
        public Number parse(String source, ParsePosition parsePosition) {
            return null;
        }

        @Override
        public StringBuffer format(double val, StringBuffer buffer, FieldPosition pos) {
            if (val < 1000) {
                return new StringBuffer(String.format("%.0f", val));
            } else {
                return new StringBuffer(String.format("%.0fK", val / 1000));
            }
        }
    });
    // This makes vertical lines move with panning
    plot.setUserDomainOrigin(0);
    plot.setDomainStep(StepMode.INCREMENT_BY_VAL, 2);
    plot.getGraph().setLinesPerDomainLabel(1);
    plot.setRangeStep(StepMode.INCREMENT_BY_VAL, yStep);
    plot.setLinesPerRangeLabel(1);
    plot.setBorderPaint(null);
    plot.getBackgroundPaint().setColor(Color.TRANSPARENT);
    plot.setPlotMargins(0, 0, 0, 0);
}
Also used : SimpleXYSeries(com.androidplot.xy.SimpleXYSeries) XYSeries(com.androidplot.xy.XYSeries) PanZoom(com.androidplot.xy.PanZoom) BarFormatter(com.androidplot.xy.BarFormatter) SimpleXYSeries(com.androidplot.xy.SimpleXYSeries) BarRenderer(com.androidplot.xy.BarRenderer) FieldPosition(java.text.FieldPosition) LineAndPointFormatter(com.androidplot.xy.LineAndPointFormatter) NumberFormat(java.text.NumberFormat) ParsePosition(java.text.ParsePosition)

Aggregations

BarFormatter (com.androidplot.xy.BarFormatter)1 BarRenderer (com.androidplot.xy.BarRenderer)1 LineAndPointFormatter (com.androidplot.xy.LineAndPointFormatter)1 PanZoom (com.androidplot.xy.PanZoom)1 SimpleXYSeries (com.androidplot.xy.SimpleXYSeries)1 XYSeries (com.androidplot.xy.XYSeries)1 FieldPosition (java.text.FieldPosition)1 NumberFormat (java.text.NumberFormat)1 ParsePosition (java.text.ParsePosition)1