MPAndroid Linechart с одним вводом данных - PullRequest
0 голосов
/ 14 ноября 2018

Я использую MPAndroidChart-v2.1.6 и столкнулся со следующей проблемой.

Когда у меня есть одна запись данных, она начинает отображать значение с индекса 0 на оси X. Вот как это выглядит. enter image description here

Я хочу, чтобы он был выровнен по центру, когда у меня есть только один ввод данных, как это .. enter image description here

Я пробовал свойства setMinimum() и setMaximum() для этого конкретного условия, но со мной не произошло ничего положительного. Когда у меня более одной записи, это работает хорошо.

Вот мой код,

ArrayList<LineDataSet> lines = new ArrayList<>();
        LineDataSet linedataset1 = new LineDataSet(group1, "Text1");
        linedataset1.setDrawFilled(false);
        linedataset1.setValueFormatter(new MyDataSetFormatter());
        linedataset1.setFillAlpha(110);
        linedataset1.setLineWidth(1f);
        linedataset1.setColor(Color.rgb(67, 91, 153));
        linedataset1.setCircleColor(Color.rgb(67, 91, 153));
        LineDataSet linedataset2 = new LineDataSet(group2, "Text2");
        linedataset2.setDrawFilled(false);
        linedataset2.setValueFormatter(new MyDataSetFormatter());
        linedataset2.setFillAlpha(110);
        linedataset2.setLineWidth(1f);
        linedataset2.setColor(Color.rgb(254, 252, 59));
        linedataset2.setCircleColor(Color.rgb(254, 252, 59));
        LineDataSet linedataset3 = new LineDataSet(group3, "Text3");
        linedataset3.setDrawFilled(false);
        linedataset3.setValueFormatter(new MyDataSetFormatter());
        linedataset3.setFillAlpha(110);
        linedataset3.setLineWidth(1f);
        linedataset3.setColor(Color.rgb(68, 185, 102));
        linedataset3.setCircleColor(Color.rgb(68, 185, 102));
        LineDataSet linedataset4 = new LineDataSet(group4, "text4");
        linedataset4.setDrawFilled(false);
        linedataset4.setValueFormatter(new MyDataSetFormatter());
        linedataset4.setFillAlpha(110);
        linedataset4.setLineWidth(1f);
        linedataset4.setColor(Color.rgb(145, 92, 96));
        linedataset4.setCircleColor(Color.rgb(145, 92, 96));
        lines.add(linedataset1);
        lines.add(linedataset2);
        lines.add(linedataset3);
        lines.add(linedataset4);
        leftYAxis = lineChart.getAxisLeft();
        rightYAxis = lineChart.getAxisRight();
        rightYAxis.setDrawLabels(false);
        rightYAxis.setAxisMaxValue(105);
        leftYAxis.setAxisMaxValue(105);

        lineChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
        lineChart.getXAxis().setLabelRotationAngle(-70);

        lineChart.getXAxis().setDrawGridLines(false);
        lineChart.getAxisLeft().setDrawGridLines(false);
        lineChart.getAxisRight().setDrawGridLines(false);
        lineChart.getAxisRight().setEnabled(false);
        lineChart.setBackgroundColor(Color.WHITE);
        lineChart.setDrawGridBackground(false);

        lineChart.setData(new LineData(newLabels, lines));
        lineChart.setPinchZoom(false);
        lineChart.animateY(1000);
        lineChart.setDescription(null);

        XAxis xAxis = lineChart.getXAxis();
        xAxis.setAvoidFirstLastClipping(true);

        //lineChart.setBackgroundColor(Color.rgb(255, 255, 255));
        lineChart.setTouchEnabled(false);
        lineChart.invalidate();

Заранее спасибо,

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Чтобы установить пределы оси X для определенных значений, вы можете вызвать setAxisMinimum и setAxisMaximum. Например:

XAxis xAxis = lineChart.getXAxis();
xAxis.setAxisMinimum(10);
xAxis.setAxisMaximum(30);

Если вы хотите сделать это автоматически, используя LineDataSet, вы можете запросить минимальное и максимальное значения данных X

float xMin = dataSet.getXMin() - 5;
float xMax = dataSet.getXMax() + 5;
xAxis.setAxisMinimum(xMin);
xAxis.setAxisMaximum(xMax);

, который будет центрировать данные, даже если есть только одна точка.

0 голосов
/ 07 июля 2019

Объявлять записи линейного графика отдельно от класса

  private ArrayList<Entry> dataValuesDaily(){
    ArrayList<Entry> dataVals = new ArrayList<>();
    dataVals.add(new Entry(1,10));
    dataVals.add(new Entry(11,2));
    dataVals.add(new Entry(21,16));
    dataVals.add(new Entry(30,4));
    return dataVals;
   }

А потом в классе

 //TODO:: LINE GRAPH
    LineDataSet lineDataSet1 = new LineDataSet(dataValuesDaily(), "Data Set 1");
    lineDataSet1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
    ArrayList<ILineDataSet> dataSets = new ArrayList<>();
    dataSets.add(lineDataSet1);

    //customization
    mLineGraph.setTouchEnabled(true);
    mLineGraph.setDragEnabled(true);
    mLineGraph.setScaleEnabled(false);
    mLineGraph.setPinchZoom(false);
    mLineGraph.setDrawGridBackground(false);
    mLineGraph.setExtraLeftOffset(15);
    mLineGraph.setExtraRightOffset(15);
    //to hide background lines
    mLineGraph.getXAxis().setDrawGridLines(false);
    mLineGraph.getAxisLeft().setDrawGridLines(false);
    mLineGraph.getAxisRight().setDrawGridLines(false);
    //to hide right Y and top X border
    YAxis rightYAxis = mLineGraph.getAxisRight();
    rightYAxis.setEnabled(false);
    XAxis topXAxis = mLineGraph.getXAxis();
    topXAxis.setEnabled(false);
    XAxis xAxis = mLineGraph.getXAxis();
    xAxis.setEnabled(true);
    xAxis.setDrawGridLines(false);
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);

    lineDataSet1.setLineWidth(4f);
    lineDataSet1.setCircleRadius(3f);
    lineDataSet1.setDrawValues(false);
    lineDataSet1.setCircleHoleColor(getResources().getColor(R.color.pie_color_4));
    lineDataSet1.setCircleColor(getResources().getColor(R.color.pie_color_4));


    LineData data = new LineData(dataSets);
    mLineGraph.setData(data);
    mLineGraph.animateX(2000);
    mLineGraph.invalidate();
    mLineGraph.getLegend().setEnabled(false);
    mLineGraph.getDescription().setEnabled(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...