MPAndroid单数据点折线图

3

我正在使用MPAndroidChart-v2.1.6,并且遇到了以下问题。

当我有一个单独的数据输入时,它会从X轴的0索引开始显示该值。这是它的外观。 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();

非常感谢您的提前帮助,


分享你的代码,我会尽力帮助。 - Misha Akopov
@MishaAkopov,感谢您的回复。我已经更新了我的问题并附上了源代码,请查看一下。 - Devraj
@Devraj,你找到解决方案了吗?如果是的话,请在答案中添加代码。或者请评论,我也遇到了同样的问题。 - Irfan Yaqub
2个回答

0

要将X轴限制为特定值,您可以调用setAxisMinimumsetAxisMaximum。例如:

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);

即使只有一个数据点,也能居中显示数据。


对于不同的情况,如左对齐或右对齐,修改我在这里编写的内容也非常容易。例如,要进行左对齐,只需将其更改为float xMin = dataSet.getXMin();即可。 - Tyler V
@IrfanYaqub 再读一遍,你弄反了。“我想要它居中对齐”。 - Tyler V
是的,你说得对。 - Irfan Yaqub

0

在类外单独声明折线图条目

  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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接