Search in sources :

Example 6 with Axis

use of lecho.lib.hellocharts.model.Axis in project xDrip by NightscoutFoundation.

the class LibreTrendGraph method setupCharts.

public void setupCharts() {
    final TextView trendView = (TextView) findViewById(R.id.textLibreHeader);
    chart = (LineChartView) findViewById(R.id.libre_chart);
    List<Line> lines = new ArrayList<Line>();
    List<PointValue> lineValues = new ArrayList<PointValue>();
    final float conversion_factor_mmol = (float) (doMgdl ? 1 : Constants.MGDL_TO_MMOLL);
    LibreBlock libreBlock = LibreBlock.getLatestForTrend();
    if (libreBlock == null) {
        trendView.setText("No libre data to display");
        setupEmptyCharts();
        return;
    }
    String time = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(new Date((long) libreBlock.timestamp));
    ArrayList<Float> bg_data = getLatestBg(libreBlock);
    if (bg_data == null) {
        trendView.setText("Error displaying data for " + time);
        setupEmptyCharts();
        return;
    }
    trendView.setText("Scan from " + time);
    float min = 1000;
    float max = 0;
    int i = 0;
    for (float bg : bg_data) {
        if (min > bg) {
            min = bg;
        }
        if (max < bg) {
            max = bg;
        }
        lineValues.add(new PointValue(-i, bg * conversion_factor_mmol));
        i++;
    }
    Line trendLine = new Line(lineValues);
    trendLine.setColor(ChartUtils.COLOR_RED);
    trendLine.setHasLines(false);
    trendLine.setHasPoints(true);
    lines.add(trendLine);
    final int MIN_GRAPH = 20;
    if (max - min < MIN_GRAPH) {
        // On relative flat trend the graph can look very noise althouth with the right resolution it is not that way.
        // I will add two dummy invisible points that will cause the graph to look with bigger Y range.
        float average = (max + min) / 2;
        List<PointValue> dummyPointValues = new ArrayList<PointValue>();
        Line dummyPointLine = new Line(dummyPointValues);
        dummyPointValues.add(new PointValue(0, (average - MIN_GRAPH / 2) * conversion_factor_mmol));
        dummyPointValues.add(new PointValue(0, (average + MIN_GRAPH / 2) * conversion_factor_mmol));
        dummyPointLine.setColor(ChartUtils.COLOR_RED);
        dummyPointLine.setHasLines(false);
        dummyPointLine.setHasPoints(false);
        lines.add(dummyPointLine);
    }
    Axis axisX = new Axis();
    Axis axisY = new Axis().setHasLines(true);
    axisX.setTextSize(16);
    axisY.setTextSize(16);
    axisX.setName("Time from last scan");
    axisY.setName("Glucose " + (doMgdl ? "mg/dl" : "mmol/l"));
    data = new LineChartData(lines);
    data.setAxisXBottom(axisX);
    data.setAxisYLeft(axisY);
    chart.setLineChartData(data);
}
Also used : PointValue(lecho.lib.hellocharts.model.PointValue) ArrayList(java.util.ArrayList) Date(java.util.Date) Line(lecho.lib.hellocharts.model.Line) LibreBlock(com.eveningoutpost.dexdrip.Models.LibreBlock) LineChartData(lecho.lib.hellocharts.model.LineChartData) TextView(android.widget.TextView) Axis(lecho.lib.hellocharts.model.Axis)

Example 7 with Axis

use of lecho.lib.hellocharts.model.Axis in project xDrip by NightscoutFoundation.

the class CalibrationGraph method setupCharts.

public void setupCharts() {
    chart = (LineChartView) findViewById(R.id.chart);
    List<Line> lines = new ArrayList<Line>();
    // calibration values
    List<Calibration> calibrations = Calibration.allForSensor();
    List<Line> greyLines = getCalibrationsLine(calibrations, Color.parseColor("#66FFFFFF"));
    calibrations = Calibration.allForSensorInLastFourDays();
    List<Line> blueLines = getCalibrationsLine(calibrations, ChartUtils.COLOR_BLUE);
    Calibration calibration = Calibration.lastValid();
    if (calibration != null) {
        // set header
        DecimalFormat df = new DecimalFormat("#");
        df.setMaximumFractionDigits(2);
        df.setMinimumFractionDigits(2);
        String Header = "slope = " + df.format(calibration.slope) + " intercept = " + df.format(calibration.intercept);
        GraphHeader.setText(Header);
        // red line
        List<PointValue> lineValues = new ArrayList<PointValue>();
        final float conversion_factor = (float) (doMgdl ? 1 : Constants.MGDL_TO_MMOLL);
        lineValues.add(new PointValue((float) start_x, (conversion_factor * (float) (start_x * calibration.slope + calibration.intercept))));
        lineValues.add(new PointValue((float) end_x, (conversion_factor * (float) (end_x * calibration.slope + calibration.intercept))));
        Line calibrationLine = new Line(lineValues);
        calibrationLine.setColor(ChartUtils.COLOR_RED);
        calibrationLine.setHasLines(true);
        calibrationLine.setHasPoints(false);
        lines.add(calibrationLine);
        // calibration plugin
        final CalibrationAbstract plugin = getCalibrationPluginFromPreferences();
        if (plugin != null) {
            final CalibrationAbstract.CalibrationData pcalibration = plugin.getCalibrationData();
            final List<PointValue> plineValues = new ArrayList<PointValue>();
            plineValues.add(new PointValue((float) start_x, (conversion_factor * (float) (plugin.getGlucoseFromSensorValue(start_x, pcalibration)))));
            plineValues.add(new PointValue((float) end_x, (conversion_factor * (float) (plugin.getGlucoseFromSensorValue(end_x, pcalibration)))));
            final Line pcalibrationLine = new Line(plineValues);
            pcalibrationLine.setColor(Color.parseColor(plugin_color));
            pcalibrationLine.setHasLines(true);
            pcalibrationLine.setHasPoints(false);
            lines.add(pcalibrationLine);
            PluginHeader.setText("(" + plugin.getAlgorithmName() + ")  " + "s = " + df.format(pcalibration.slope) + "  i = " + df.format(pcalibration.intercept));
            PluginHeader.setTextColor(Color.parseColor(plugin_color));
        }
        // add lines in order
        for (Line greyLine : greyLines) {
            lines.add(greyLine);
        }
        for (Line blueLine : blueLines) {
            lines.add(blueLine);
        }
    }
    Axis axisX = new Axis();
    Axis axisY = new Axis().setHasLines(true);
    axisX.setName("Raw Value");
    axisY.setName("Glucose " + (doMgdl ? "mg/dl" : "mmol/l"));
    data = new LineChartData(lines);
    data.setAxisXBottom(axisX);
    data.setAxisYLeft(axisY);
    chart.setLineChartData(data);
}
Also used : PointValue(lecho.lib.hellocharts.model.PointValue) DecimalFormat(java.text.DecimalFormat) ArrayList(java.util.ArrayList) Calibration(com.eveningoutpost.dexdrip.Models.Calibration) Line(lecho.lib.hellocharts.model.Line) CalibrationAbstract(com.eveningoutpost.dexdrip.calibrations.CalibrationAbstract) LineChartData(lecho.lib.hellocharts.model.LineChartData) Axis(lecho.lib.hellocharts.model.Axis)

Example 8 with Axis

use of lecho.lib.hellocharts.model.Axis in project xDrip-plus by jamorham.

the class CalibrationGraph method setupCharts.

public void setupCharts() {
    chart = (LineChartView) findViewById(R.id.chart);
    List<Line> lines = new ArrayList<Line>();
    // calibration values
    List<Calibration> calibrations = Calibration.allForSensor();
    List<Line> greyLines = getCalibrationsLine(calibrations, Color.parseColor("#66FFFFFF"));
    calibrations = Calibration.allForSensorInLastFourDays();
    List<Line> blueLines = getCalibrationsLine(calibrations, ChartUtils.COLOR_BLUE);
    Calibration calibration = Calibration.lastValid();
    if (calibration != null) {
        // set header
        DecimalFormat df = new DecimalFormat("#");
        df.setMaximumFractionDigits(2);
        df.setMinimumFractionDigits(2);
        String Header = "slope = " + df.format(calibration.slope) + " intercept = " + df.format(calibration.intercept);
        GraphHeader.setText(Header);
        // red line
        List<PointValue> lineValues = new ArrayList<PointValue>();
        final float conversion_factor = (float) (doMgdl ? 1 : Constants.MGDL_TO_MMOLL);
        lineValues.add(new PointValue((float) start_x, (conversion_factor * (float) (start_x * calibration.slope + calibration.intercept))));
        lineValues.add(new PointValue((float) end_x, (conversion_factor * (float) (end_x * calibration.slope + calibration.intercept))));
        Line calibrationLine = new Line(lineValues);
        calibrationLine.setColor(ChartUtils.COLOR_RED);
        calibrationLine.setHasLines(true);
        calibrationLine.setHasPoints(false);
        lines.add(calibrationLine);
        // calibration plugin
        final CalibrationAbstract plugin = getCalibrationPluginFromPreferences();
        if (plugin != null) {
            final CalibrationAbstract.CalibrationData pcalibration = plugin.getCalibrationData();
            final List<PointValue> plineValues = new ArrayList<PointValue>();
            plineValues.add(new PointValue((float) start_x, (conversion_factor * (float) (plugin.getGlucoseFromSensorValue(start_x, pcalibration)))));
            plineValues.add(new PointValue((float) end_x, (conversion_factor * (float) (plugin.getGlucoseFromSensorValue(end_x, pcalibration)))));
            final Line pcalibrationLine = new Line(plineValues);
            pcalibrationLine.setColor(Color.parseColor(plugin_color));
            pcalibrationLine.setHasLines(true);
            pcalibrationLine.setHasPoints(false);
            lines.add(pcalibrationLine);
            PluginHeader.setText("(" + plugin.getAlgorithmName() + ")  " + "s = " + df.format(pcalibration.slope) + "  i = " + df.format(pcalibration.intercept));
            PluginHeader.setTextColor(Color.parseColor(plugin_color));
        }
        // add lines in order
        for (Line greyLine : greyLines) {
            lines.add(greyLine);
        }
        for (Line blueLine : blueLines) {
            lines.add(blueLine);
        }
    }
    Axis axisX = new Axis();
    Axis axisY = new Axis().setHasLines(true);
    axisX.setName("Raw Value");
    axisY.setName("Glucose " + (doMgdl ? "mg/dl" : "mmol/l"));
    data = new LineChartData(lines);
    data.setAxisXBottom(axisX);
    data.setAxisYLeft(axisY);
    chart.setLineChartData(data);
}
Also used : PointValue(lecho.lib.hellocharts.model.PointValue) DecimalFormat(java.text.DecimalFormat) ArrayList(java.util.ArrayList) Calibration(com.eveningoutpost.dexdrip.Models.Calibration) Line(lecho.lib.hellocharts.model.Line) CalibrationAbstract(com.eveningoutpost.dexdrip.calibrations.CalibrationAbstract) LineChartData(lecho.lib.hellocharts.model.LineChartData) Axis(lecho.lib.hellocharts.model.Axis)

Example 9 with Axis

use of lecho.lib.hellocharts.model.Axis in project xDrip-plus by jamorham.

the class BgGraphBuilder method xAxis.

public Axis xAxis() {
    // final boolean is24 = DateFormat.is24HourFormat(context);
    Axis xAxis = new Axis();
    xAxis.setAutoGenerated(false);
    List<AxisValue> xAxisValues = new ArrayList<AxisValue>();
    GregorianCalendar now = new GregorianCalendar();
    GregorianCalendar today = new GregorianCalendar(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH));
    SimpleDateFormat timeFormat = new SimpleDateFormat(is24 ? "HH" : "h a");
    timeFormat.setTimeZone(TimeZone.getDefault());
    double start_hour = today.getTime().getTime();
    double timeNow = new Date().getTime();
    for (int l = 0; l <= 24; l++) {
        if ((start_hour + (60000 * 60 * (l))) < timeNow) {
            if ((start_hour + (60000 * 60 * (l + 1))) >= timeNow) {
                endHour = start_hour + (60000 * 60 * (l));
                l = 25;
            }
        }
    }
    // Display current time on the graph
    SimpleDateFormat longTimeFormat = new SimpleDateFormat(is24 ? "HH:mm" : "h:mm a");
    xAxisValues.add(new AxisValue(fuzz(timeNow), (longTimeFormat.format(timeNow)).toCharArray()));
    // Add whole hours to the axis (as long as they are more than 15 mins away from the current time)
    for (int l = 0; l <= 24; l++) {
        double timestamp = endHour - (60000 * 60 * l);
        if ((timestamp - timeNow < 0) && (timestamp > start_time)) {
            if (Math.abs(timestamp - timeNow) > (1000 * 60 * 8 * timespan)) {
                xAxisValues.add(new AxisValue(fuzz(timestamp), (timeFormat.format(timestamp)).toCharArray()));
            } else {
                xAxisValues.add(new AxisValue(fuzz(timestamp), "".toCharArray()));
            }
        }
    }
    xAxis.setValues(xAxisValues);
    xAxis.setTextSize(10);
    xAxis.setHasLines(true);
    return xAxis;
}
Also used : AxisValue(lecho.lib.hellocharts.model.AxisValue) ArrayList(java.util.ArrayList) GregorianCalendar(java.util.GregorianCalendar) SimpleDateFormat(java.text.SimpleDateFormat) Axis(lecho.lib.hellocharts.model.Axis) Date(java.util.Date)

Example 10 with Axis

use of lecho.lib.hellocharts.model.Axis in project xDrip-plus by jamorham.

the class BgGraphBuilder method yAxis.

// ///////AXIS RELATED//////////////
public Axis yAxis() {
    Axis yAxis = new Axis();
    yAxis.setAutoGenerated(true);
    List<AxisValue> axisValues = new ArrayList<AxisValue>();
    yAxis.setValues(axisValues);
    yAxis.setHasLines(false);
    return yAxis;
}
Also used : AxisValue(lecho.lib.hellocharts.model.AxisValue) ArrayList(java.util.ArrayList) Axis(lecho.lib.hellocharts.model.Axis)

Aggregations

Axis (lecho.lib.hellocharts.model.Axis)27 ArrayList (java.util.ArrayList)21 AxisValue (lecho.lib.hellocharts.model.AxisValue)14 Line (lecho.lib.hellocharts.model.Line)10 LineChartData (lecho.lib.hellocharts.model.LineChartData)9 PointValue (lecho.lib.hellocharts.model.PointValue)8 GregorianCalendar (java.util.GregorianCalendar)5 TextView (android.widget.TextView)4 SimpleDateFormat (java.text.SimpleDateFormat)4 Calendar (java.util.Calendar)4 Date (java.util.Date)4 Column (lecho.lib.hellocharts.model.Column)3 ColumnChartData (lecho.lib.hellocharts.model.ColumnChartData)3 SelectedValue (lecho.lib.hellocharts.model.SelectedValue)3 SubcolumnValue (lecho.lib.hellocharts.model.SubcolumnValue)3 Viewport (lecho.lib.hellocharts.model.Viewport)3 Context (android.content.Context)2 NonNull (android.support.annotation.NonNull)2 RecyclerView (android.support.v7.widget.RecyclerView)2 View (android.view.View)2