当前位置: 首页 > 知识库问答 >
问题:

在MP android折线图中添加x轴上的日期和Y轴上的值?

司知
2023-03-14

我正在使用库MPAndroid,< code >编译' com . github . philjay:MPAndroidChart:v 3 . 0 . 0-beta 1 '

我必须在MPAndroid折线图中传递x轴上的日期和y轴上的值,当我传递x轴或y轴上的值时,应用程序崩溃,显示< code > ArrayIndexOutOfBound < code >异常,数组大小为-2。

我怎么能做到这一点?我也使用了xAxis值格式化程序。求求你,帮帮我。下面是我的代码

{mChart.setOnChartGestureListener(this);mChart.setOnChart1ValueSelectedListener(this);mChart.setDrawGridBackground(false);

    mChart.setNoDataTextDescription("You need to provide data for the chart.");
    mChart.setTouchEnabled(false);
    mChart.getAxisLeft().setDrawGridLines(false);
    mChart.getXAxis().setDrawGridLines(false);
    mChart.setDragEnabled(false);
    mChart.setScaleEnabled(false);
    mChart.getAxisLeft().setDrawLimitLinesBehindData(true);

    XAxis xAxis = mChart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setLabelRotationAngle(270);
    xAxis.setAxisLineWidth(3);
    xAxis.setAxisMaxValue(310f);
    xAxis.setTextSize(13f);
    xAxis.setTextColor(Color.WHITE);

    YAxis leftAxis = mChart.getAxisLeft();
    leftAxis.removeAllLimitLines();
    leftAxis.setAxisMaxValue(330f);
    leftAxis.setAxisMinValue(50f);
    leftAxis.setAxisLineWidth(3);
    leftAxis.setDrawAxisLine(false);
    leftAxis.setDrawGridLines(true);
    leftAxis.setTextSize(13f);
    leftAxis.setGranularity(1f);
    leftAxis.setTextColor(Color.WHITE);
    leftAxis.setDrawZeroLine(false);
    leftAxis.setDrawLimitLinesBehindData(false);

    mChart.getAxisRight().setEnabled(false);
    mChart.animateX(2500, Easing.EasingOption.EaseInOutQuart);

    mChart.invalidate();

}

      private ArrayList<String> setXAxisValues() {
    return typesList;
}

private ArrayList<Entry> setYAxisValues() {
    float[] EndTime = new float [glucoseReportReading.length];
    for (int i=0; i<glucoseReportReading.length;i++)
    {
        float number = Float.parseFloat(glucoseReportReading[i]);
        float rounded = (int) Math.round(number * 1000) / 1000f;
        EndTime[i] = rounded;
    }

    ArrayList<Entry> yVals = new ArrayList<Entry>();

    for(int i=0;i<glucoseReadingArrayList.size();i++){
        yVals.add(new Entry(EndTime[i],i));
    }

    return yVals;
}

private void setData() {
    GraphModelClass graphModelClass = new GraphModelClass();
    ArrayList<Entry> yVals1 = setYAxisValues();
    ArrayList<String> xVals1 = setXAxisValues();
    graphModelClass.setyVals(yVals1);
    graphModelClass.setxVals(xVals1);

    ArrayList<String> xVals = graphModelClass.getxVals();//setXAxisValues();
    ArrayList<Entry> yVals = graphModelClass.getyVals();//setYAxisValues();

    LineDataSet set1;

    set1 = new LineDataSet(yVals, "DataSet 1");
    set1.setFillColor(Color.TRANSPARENT);
    set1.setColor(Color.RED);
    set1.setCircleColor(Color.BLUE);
    set1.setLineWidth(2f);
    set1.setCircleRadius(4f);
    set1.setDrawCircleHole(true);
    set1.setValueTextSize(10f);
    set1.setDrawFilled(true);
   /* ArrayList<LineDataSet> dataSets = new ArrayList<LineDataSet>();
    dataSets.add(set1);*/
    LineData data = new LineData(xVals,set1);
    mChart.setData(data);}

共有2个答案

闻人志
2023-03-14

替换此行:

for(int i=0;i<glucoseReadingArrayList.size();i++)

跟:

for(int i=0;i<typesList.size();i++)
干京
2023-03-14

使用< code>AxisValueFormatter是正确的。您面临的问题是,库希望在您的图表之前和之后绘制标签,但在您的数组中找不到值。

你可以通过检查索引和归还空标签来解决这个问题。

@Override
public String getFormattedValue(float value, AxisBase axis) {
    if (value < 0 || value > glucoseReportTime.size() - 1)
        return "";
    return glucoseReportTime[(int) value];
}

如果您不想在图表前后留空,您可以进一步使用

XAxis xAxis = chart.getXAxis();
xAxis.setAxisMinimum(<yourMinum>);
xAxis.setAxisMaximum(<yourMaximum>);
 类似资料:
  • 问题内容: 我在制作具有日期数组和一堆PM 2.5值的散点图时遇到麻烦。我的列表如下所示: 问题答案: 设置大小 设置颜色 还有很多其他参数:http : //matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.scatter

  • 我正在从csv文件中读取日期/时间和数据,并将其存储在折线图中。我的日期/时间字符串是或,这实际上是第一个条目,我有几个小时的数据。 首先,我将chartArea X轴lablestyle设置为正确的格式:。 然后,我使用与上面相同的格式将实际的日期字符串解析为DateTime格式:。并将数据添加到图表中。

  • 我正在尝试修复python如何绘制数据。 说 和 然后我会做: x轴的刻度以5为间隔绘制。有没有办法让它显示1的间隔?

  • 我正在尝试修复python如何绘制数据。 说 和 然后我会做: x轴的刻度以5的间隔绘制。有没有办法让它显示1的间隔?

  • 在放大MPandroid图表时,是否可以更改X轴上的标签?我希望在开始时将年作为标签,而不是在缩放时变为月,然后是周(缩放时标签将变得更准确)。

  • 问题内容: 使用新版本时,我在创建一些图形时遇到了一些麻烦,以前的代码是: 您可以使用以下行来传递值,例如,月份数组: 新版本发布后,用于实现相同图形的代码为: 我尝试了几个小时,但找不到修改X轴值的方法,希望有人可以帮助我,谢谢! 问题答案: 我找到了解决方案,也许另一个解决方案可以更好地解决此问题,而无需创建新类,这就是我发现的: 首先,您需要创建一个新类,该类将是您的格式化程序类,并添加IA