Search in sources :

Example 16 with BarEntry

use of com.github.mikephil.charting.data.BarEntry in project carat by amplab.

the class BarChart method drawValues.

@Override
protected void drawValues() {
    // if values are drawn
    if (mDrawYValues && mData.getYValCount() < mMaxVisibleCount * mTrans.getScaleX()) {
        ArrayList<BarDataSet> dataSets = ((BarData) mData).getDataSets();
        float posOffset = 0f;
        float negOffset = 0f;
        // calculate the correct offset depending on the draw position of
        // the value
        posOffset = getPositiveYOffset(mDrawValueAboveBar);
        negOffset = getNegativeYOffset(mDrawValueAboveBar);
        for (int i = 0; i < mData.getDataSetCount(); i++) {
            BarDataSet dataSet = dataSets.get(i);
            ArrayList<BarEntry> entries = dataSet.getYVals();
            float[] valuePoints = mTrans.generateTransformedValuesBarChart(entries, i, mData, mPhaseY);
            // if only single values are drawn (sum)
            if (!mDrawValuesForWholeStack) {
                for (int j = 0; j < valuePoints.length * mPhaseX; j += 2) {
                    if (isOffContentRight(valuePoints[j]))
                        break;
                    if (isOffContentLeft(valuePoints[j]) || isOffContentTop(valuePoints[j + 1]) || isOffContentBottom(valuePoints[j + 1]))
                        continue;
                    float val = entries.get(j / 2).getVal();
                    drawValue(val, valuePoints[j], valuePoints[j + 1] + (val >= 0 ? posOffset : negOffset));
                }
            // if each value of a potential stack should be drawn
            } else {
                for (int j = 0; j < (valuePoints.length - 1) * mPhaseX; j += 2) {
                    if (isOffContentRight(valuePoints[j]))
                        break;
                    if (isOffContentLeft(valuePoints[j]) || isOffContentTop(valuePoints[j + 1]) || isOffContentBottom(valuePoints[j + 1]))
                        continue;
                    BarEntry e = entries.get(j / 2);
                    float[] vals = e.getVals();
                    // in between
                    if (vals == null) {
                        drawValue(e.getVal(), valuePoints[j], valuePoints[j + 1] + (e.getVal() >= 0 ? posOffset : negOffset));
                    } else {
                        float[] transformed = new float[vals.length * 2];
                        int cnt = 0;
                        float add = e.getVal();
                        for (int k = 0; k < transformed.length; k += 2) {
                            add -= vals[cnt];
                            transformed[k + 1] = (vals[cnt] + add) * mPhaseY;
                            cnt++;
                        }
                        mTrans.pointValuesToPixel(transformed);
                        for (int k = 0; k < transformed.length; k += 2) {
                            drawValue(vals[k / 2], valuePoints[j], transformed[k + 1] + (vals[k / 2] >= 0 ? posOffset : negOffset));
                        }
                    }
                }
            }
        }
    }
}
Also used : BarDataSet(com.github.mikephil.charting.data.BarDataSet) BarData(com.github.mikephil.charting.data.BarData) BarEntry(com.github.mikephil.charting.data.BarEntry) Paint(android.graphics.Paint)

Example 17 with BarEntry

use of com.github.mikephil.charting.data.BarEntry in project Gadgetbridge by Freeyourgadget.

the class AbstractChartFragment method refresh.

protected DefaultChartsData<CombinedData> refresh(GBDevice gbDevice, List<? extends ActivitySample> samples) {
    //        Calendar cal = GregorianCalendar.getInstance();
    //        cal.clear();
    TimestampTranslation tsTranslation = new TimestampTranslation();
    //        Date date;
    //        String dateStringFrom = "";
    //        String dateStringTo = "";
    //        ArrayList<String> xLabels = null;
    LOG.info("" + getTitle() + ": number of samples:" + samples.size());
    CombinedData combinedData;
    if (samples.size() > 1) {
        boolean annotate = true;
        boolean use_steps_as_movement;
        int last_type = ActivityKind.TYPE_UNKNOWN;
        int numEntries = samples.size();
        List<BarEntry> activityEntries = new ArrayList<>(numEntries);
        boolean hr = supportsHeartrate(gbDevice);
        List<Entry> heartrateEntries = hr ? new ArrayList<Entry>(numEntries) : null;
        // this is kinda inefficient...
        List<Integer> colors = new ArrayList<>(numEntries);
        int lastHrSampleIndex = -1;
        for (int i = 0; i < numEntries; i++) {
            ActivitySample sample = samples.get(i);
            int type = sample.getKind();
            int ts = tsTranslation.shorten(sample.getTimestamp());
            //                System.out.println(ts);
            //                ts = i;
            // determine start and end dates
            //                if (i == 0) {
            //                    cal.setTimeInMillis(ts * 1000L); // make sure it's converted to long
            //                    date = cal.getTime();
            //                    dateStringFrom = dateFormat.format(date);
            //                } else if (i == samples.size() - 1) {
            //                    cal.setTimeInMillis(ts * 1000L); // same here
            //                    date = cal.getTime();
            //                    dateStringTo = dateFormat.format(date);
            //                }
            float movement = sample.getIntensity();
            float value = movement;
            switch(type) {
                case ActivityKind.TYPE_DEEP_SLEEP:
                    value += SleepUtils.Y_VALUE_DEEP_SLEEP;
                    colors.add(akDeepSleep.color);
                    break;
                case ActivityKind.TYPE_LIGHT_SLEEP:
                    colors.add(akLightSleep.color);
                    break;
                case ActivityKind.TYPE_NOT_WORN:
                    //a small value, just to show something on the graphs
                    value = SleepUtils.Y_VALUE_DEEP_SLEEP;
                    colors.add(akNotWorn.color);
                    break;
                default:
                    //                        short steps = sample.getSteps();
                    //                        if (use_steps_as_movement && steps != 0) {
                    //                            // I'm not sure using steps for this is actually a good idea
                    //                            movement = steps;
                    //                        }
                    //                        value = ((float) movement) / movement_divisor;
                    colors.add(akActivity.color);
            }
            activityEntries.add(createBarEntry(value, ts));
            if (hr && isValidHeartRateValue(sample.getHeartRate())) {
                if (lastHrSampleIndex > -1 && ts - lastHrSampleIndex > 60 * HeartRateUtils.MAX_HR_MEASUREMENTS_GAP_MINUTES) {
                    heartrateEntries.add(createLineEntry(0, lastHrSampleIndex + 1));
                    heartrateEntries.add(createLineEntry(0, ts - 1));
                }
                heartrateEntries.add(createLineEntry(sample.getHeartRate(), ts));
                lastHrSampleIndex = ts;
            }
            String xLabel = "";
            if (annotate) {
            //                    cal.setTimeInMillis((ts + tsOffset) * 1000L);
            //                    date = cal.getTime();
            //                    String dateString = annotationDateFormat.format(date);
            //                    xLabel = dateString;
            //                    if (last_type != type) {
            //                        if (isSleep(last_type) && !isSleep(type)) {
            //                            // woken up
            //                            LimitLine line = new LimitLine(i, dateString);
            //                            line.enableDashedLine(8, 8, 0);
            //                            line.setTextColor(Color.WHITE);
            //                            line.setTextSize(15);
            //                            chart.getXAxis().addLimitLine(line);
            //                        } else if (!isSleep(last_type) && isSleep(type)) {
            //                            // fallen asleep
            //                            LimitLine line = new LimitLine(i, dateString);
            //                            line.enableDashedLine(8, 8, 0);
            //                            line.setTextSize(15);
            //                            line.setTextColor(Color.WHITE);
            //                            chart.getXAxis().addLimitLine(line);
            //                        }
            //                    }
            //                    last_type = type;
            }
        }
        BarDataSet activitySet = createActivitySet(activityEntries, colors, "Activity");
        // create a data object with the datasets
        //            combinedData = new CombinedData(xLabels);
        combinedData = new CombinedData();
        List<IBarDataSet> list = new ArrayList<>();
        list.add(activitySet);
        BarData barData = new BarData(list);
        barData.setBarWidth(100f);
        //            barData.setGroupSpace(0);
        combinedData.setData(barData);
        if (hr && heartrateEntries.size() > 0) {
            LineDataSet heartrateSet = createHeartrateSet(heartrateEntries, "Heart Rate");
            LineData lineData = new LineData(heartrateSet);
            combinedData.setData(lineData);
        }
    //            chart.setDescription(getString(R.string.sleep_activity_date_range, dateStringFrom, dateStringTo));
    //            chart.setDescriptionPosition(?, ?);
    } else {
        combinedData = new CombinedData();
    }
    IAxisValueFormatter xValueFormatter = new SampleXLabelFormatter(tsTranslation);
    return new DefaultChartsData(combinedData, xValueFormatter);
}
Also used : AbstractActivitySample(nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample) ActivitySample(nodomain.freeyourgadget.gadgetbridge.model.ActivitySample) BarDataSet(com.github.mikephil.charting.data.BarDataSet) IBarDataSet(com.github.mikephil.charting.interfaces.datasets.IBarDataSet) LineDataSet(com.github.mikephil.charting.data.LineDataSet) ArrayList(java.util.ArrayList) IAxisValueFormatter(com.github.mikephil.charting.formatter.IAxisValueFormatter) CombinedData(com.github.mikephil.charting.data.CombinedData) BarEntry(com.github.mikephil.charting.data.BarEntry) Entry(com.github.mikephil.charting.data.Entry) BarEntry(com.github.mikephil.charting.data.BarEntry) LineData(com.github.mikephil.charting.data.LineData) BarData(com.github.mikephil.charting.data.BarData) IBarDataSet(com.github.mikephil.charting.interfaces.datasets.IBarDataSet)

Example 18 with BarEntry

use of com.github.mikephil.charting.data.BarEntry in project Gadgetbridge by Freeyourgadget.

the class LiveActivityFragment method setupCommonChart.

private BarDataSet setupCommonChart(CustomBarChart chart, BarEntry entry, String title) {
    chart.setSinglAnimationEntry(entry);
    //        chart.getXAxis().setPosition(XAxis.XAxisPosition.TOP);
    chart.getXAxis().setDrawLabels(false);
    chart.getXAxis().setEnabled(false);
    chart.getXAxis().setTextColor(CHART_TEXT_COLOR);
    chart.getAxisLeft().setTextColor(CHART_TEXT_COLOR);
    chart.setBackgroundColor(BACKGROUND_COLOR);
    chart.getDescription().setTextColor(DESCRIPTION_COLOR);
    chart.getDescription().setText(title);
    //        chart.setNoDataTextDescription("");
    chart.setNoDataText("");
    chart.getAxisRight().setEnabled(false);
    List<BarEntry> entries = new ArrayList<>();
    List<Integer> colors = new ArrayList<>();
    entries.add(new BarEntry(0, 0));
    entries.add(entry);
    entries.add(new BarEntry(2, 0));
    colors.add(akActivity.color);
    colors.add(akActivity.color);
    colors.add(akActivity.color);
    //        //we don't want labels
    //        xLabels.add("");
    //        xLabels.add("");
    //        xLabels.add("");
    BarDataSet set = new BarDataSet(entries, "");
    set.setDrawValues(false);
    set.setColors(colors);
    BarData data = new BarData(set);
    //        data.setGroupSpace(0);
    chart.setData(data);
    chart.getLegend().setEnabled(false);
    return set;
}
Also used : BarDataSet(com.github.mikephil.charting.data.BarDataSet) BarData(com.github.mikephil.charting.data.BarData) ArrayList(java.util.ArrayList) BarEntry(com.github.mikephil.charting.data.BarEntry)

Example 19 with BarEntry

use of com.github.mikephil.charting.data.BarEntry in project MPAndroidChart by PhilJay.

the class BarChartActivity method setData.

private void setData(int count, float range) {
    float start = 1f;
    ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
    for (int i = (int) start; i < start + count + 1; i++) {
        float mult = (range + 1);
        float val = (float) (Math.random() * mult);
        if (Math.random() * 100 < 25) {
            yVals1.add(new BarEntry(i, val, getResources().getDrawable(R.drawable.star)));
        } else {
            yVals1.add(new BarEntry(i, val));
        }
    }
    BarDataSet set1;
    if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) {
        set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0);
        set1.setValues(yVals1);
        mChart.getData().notifyDataChanged();
        mChart.notifyDataSetChanged();
    } else {
        set1 = new BarDataSet(yVals1, "The year 2017");
        set1.setDrawIcons(false);
        set1.setColors(ColorTemplate.MATERIAL_COLORS);
        ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
        dataSets.add(set1);
        BarData data = new BarData(dataSets);
        data.setValueTextSize(10f);
        data.setValueTypeface(mTfLight);
        data.setBarWidth(0.9f);
        mChart.setData(data);
    }
}
Also used : BarDataSet(com.github.mikephil.charting.data.BarDataSet) IBarDataSet(com.github.mikephil.charting.interfaces.datasets.IBarDataSet) BarData(com.github.mikephil.charting.data.BarData) IBarDataSet(com.github.mikephil.charting.interfaces.datasets.IBarDataSet) ArrayList(java.util.ArrayList) BarEntry(com.github.mikephil.charting.data.BarEntry) SuppressLint(android.annotation.SuppressLint)

Example 20 with BarEntry

use of com.github.mikephil.charting.data.BarEntry in project MPAndroidChart by PhilJay.

the class BarChartPositiveNegative method setData.

private void setData(List<Data> dataList) {
    ArrayList<BarEntry> values = new ArrayList<BarEntry>();
    List<Integer> colors = new ArrayList<Integer>();
    int green = Color.rgb(110, 190, 102);
    int red = Color.rgb(211, 74, 88);
    for (int i = 0; i < dataList.size(); i++) {
        Data d = dataList.get(i);
        BarEntry entry = new BarEntry(d.xValue, d.yValue);
        values.add(entry);
        // specific colors
        if (d.yValue >= 0)
            colors.add(red);
        else
            colors.add(green);
    }
    BarDataSet set;
    if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) {
        set = (BarDataSet) mChart.getData().getDataSetByIndex(0);
        set.setValues(values);
        mChart.getData().notifyDataChanged();
        mChart.notifyDataSetChanged();
    } else {
        set = new BarDataSet(values, "Values");
        set.setColors(colors);
        set.setValueTextColors(colors);
        BarData data = new BarData(set);
        data.setValueTextSize(13f);
        data.setValueTypeface(mTf);
        data.setValueFormatter(new ValueFormatter());
        data.setBarWidth(0.8f);
        mChart.setData(data);
        mChart.invalidate();
    }
}
Also used : BarDataSet(com.github.mikephil.charting.data.BarDataSet) BarData(com.github.mikephil.charting.data.BarData) ArrayList(java.util.ArrayList) BarData(com.github.mikephil.charting.data.BarData) IValueFormatter(com.github.mikephil.charting.formatter.IValueFormatter) IAxisValueFormatter(com.github.mikephil.charting.formatter.IAxisValueFormatter) BarEntry(com.github.mikephil.charting.data.BarEntry)

Aggregations

BarEntry (com.github.mikephil.charting.data.BarEntry)36 ArrayList (java.util.ArrayList)23 BarData (com.github.mikephil.charting.data.BarData)22 BarDataSet (com.github.mikephil.charting.data.BarDataSet)20 IBarDataSet (com.github.mikephil.charting.interfaces.datasets.IBarDataSet)14 Entry (com.github.mikephil.charting.data.Entry)5 Transformer (com.github.mikephil.charting.utils.Transformer)5 BufferedReader (java.io.BufferedReader)5 IOException (java.io.IOException)5 Paint (android.graphics.Paint)4 BarBuffer (com.github.mikephil.charting.buffer.BarBuffer)4 IAxisValueFormatter (com.github.mikephil.charting.formatter.IAxisValueFormatter)3 InputStreamReader (java.io.InputStreamReader)3 SuppressLint (android.annotation.SuppressLint)2 Drawable (android.graphics.drawable.Drawable)2 HorizontalBarBuffer (com.github.mikephil.charting.buffer.HorizontalBarBuffer)2 IValueFormatter (com.github.mikephil.charting.formatter.IValueFormatter)2 MPPointF (com.github.mikephil.charting.utils.MPPointF)2 File (java.io.File)2 FileReader (java.io.FileReader)2