MPAndroidChart и несколько строк на одном графике - PullRequest
0 голосов
/ 16 января 2019

это один из моих первых проектов с Java и Android Studio.

Я использую MPAndroidChart для создания графика со строкой со случайными данными. Все в порядке, но я не могу понять, как добавить 2 или 3 строки на одном графике.

Может кто-нибудь посоветовать мне или показать мне путь? Я просто хочу отобразить 2-3 строки с разными цветами.

Спасибо!

private RelativeLayout relativeLayout;
    private LineChart mChart;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_graph);
        relativeLayout = findViewById(R.id.relativeLayout);


        // create line chart
        mChart =  new LineChart(this);
        //add to  layout
        relativeLayout.addView(mChart);
        //customize line chart
        //mChart.setNoDataTextDescription("");
        mChart.setNoDataText("No data for the moment");

        //enable value highlighting
        mChart.setHighlightEnabled(true);
        //enable touch
        mChart.setTouchEnabled(true);
        //we want also scaling and dragging
        mChart.setDragEnabled(true);
        mChart.setScaleEnabled(true);
        mChart.setDrawGridBackground(false);

        //enable pinch zoom to avoid scaling x and y axis separately

        mChart.setPinchZoom(true);

        //alternative backgroundColor
        mChart.setBackgroundColor(Color.BLACK);

        //now , we work on data
        LineData data = new LineData();
        data.setValueTextColor(Color.WHITE);

        //  add data to line chart
        mChart.setData(data);

        // get legend object
        Legend l = mChart.getLegend();

        //customize legend
        l.setForm(Legend.LegendForm.LINE);
        l.setTextColor(Color.WHITE);

        XAxis x1 = mChart.getXAxis();
        x1.setTextColor(Color.WHITE);
        x1.setDrawGridLines(false);
        x1.setAvoidFirstLastClipping(true);

        YAxis y1 = mChart.getAxisLeft();
        y1.setStartAtZero(false);
        y1.setTextColor(Color.WHITE);
        y1.setAxisMaxValue(50f);
        y1.setAxisMinValue(-50f);
        y1.setDrawGridLines(false);

        YAxis y12 = mChart.getAxisRight();
        y12.setEnabled(false);


    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        // new, we're going to simulate real time data addition

        new Thread(new Runnable() {
            @Override
            public void run() {
                //add 100 entries
                for (int i = 0; i < 100; i++) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            addEntry();
                        }
                    });
                    // pause between adds
                    try {
                        Thread.sleep(60);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

    }

    //We need to create method to add entry to the line chart
    private void addEntry(){

        LineData data = mChart.getData();

        if (data != null) {
            LineDataSet set = data.getDataSetByIndex(0);

            if (set == null) {
                //creation if null
                set = createSet();
                data.addDataSet(set);
            }
            // add a new random value
            data.addXValue("");
            data.addEntry(new Entry((float)(Math.random())*100f-50f,set.getEntryCount()),0);

            //notify chart data have changed
            mChart.notifyDataSetChanged();
            // limit number if visible entreies
            mChart.setVisibleXRange(6);
            //scroll to the last entry
            mChart.moveViewToX(data.getXValCount()-7);
        }
    }
    private LineDataSet createSet() {
        LineDataSet set = new LineDataSet(null,"Accelerometer X [m/s2]");
        set.setDrawCubic(true);
        set.setCubicIntensity(0.2f);
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        set.setColor(ColorTemplate.getHoloBlue());
        set.setCircleColor(ColorTemplate.getHoloBlue());
        set.setLineWidth(2f);
        set.setCircleSize(4f);
        set.setFillAlpha(65);
        set.setFillColor(ColorTemplate.getHoloBlue());
        set.setHighLightColor(Color.rgb(244,117,177));
        set.setValueTextColor(Color.WHITE);
        set.setValueTextSize(10f);

        return set;
    }

1 Ответ

0 голосов
/ 03 июня 2019

Вы можете проверить MultiLineChartActivity.java класс здесь:

MultiLineChartActivity.java класс в Github

...