【问题标题】:MPAndroidChart - why line not showing?MPAndroidChart - 为什么线不显示?
【发布时间】:2020-01-30 02:31:16
【问题描述】:

我想创建一个带有时间表的小型应用程序。但是由于某种原因,当我在图表中添加很多点时,它根本不会出现,尽管点数很少,但一切正常。

   void f() {
 ArrayList<Entry> values = new ArrayList<>();

    for (int i = x1, index = 0, j = y; i < x2; ++i, ++index)
    {
        float waveLength = (float) calib_a * i +  (float) calib_b;
        int pixel = rotated.getPixel(i, j);
        float I = (Color.red(pixel) + Color.blue(pixel) + Color.green(pixel)) / 765.0f;
        values.add(new Entry((int) waveLength, I));
        Log.d("[SPECTRAl]", " WAVE:  " +waveLength + "  I: " + I);
       // i += 4;
    }



    LineDataSet lineValues = new LineDataSet(values, "");

    lineValues.setColor(Color.BLACK);
    lineValues.setLineWidth(2f);
    LineData line = new LineData(lineValues);
    chart.getXAxis().setGranularity(100f);
    chart.setData(line);
    chart.invalidate();
}

但可以使用:

   void f() {
 ArrayList<Entry> values = new ArrayList<>();

 values.add(new Entry(100, 6));
 values.add(new Entry(200, 3));
 values.add(new Entry(300, 2));
 values.add(new Entry(400, 4));



    LineDataSet lineValues = new LineDataSet(values, "");

    lineValues.setColor(Color.BLACK);
    lineValues.setLineWidth(2f);
    LineData line = new LineData(lineValues);
    chart.getXAxis().setGranularity(100f);
    chart.setData(line);
    chart.invalidate();
}

【问题讨论】:

  • 您是否尝试在 AS 上运行调试?是否有任何错误,检查您的日志以查看是否有任何错误并在此处发布
  • @RubenMeiring,没有错误。但我注意到,如果你将周期缩短 5 倍,那么点就可以正确显示。
  • 那么有可能是循环“超时”,因此尝试微调循环数以获得最大循环数,内存泄漏问题也可能是一个问题,但这是高度不太可能

标签: java android mpandroidchart


【解决方案1】:

以下代码创建问题:

 for (int i = x1, index = 0, j = y; i < x2; ++i, ++index)
{
    float waveLength = (float) calib_a * i +  (float) calib_b;
    int pixel = rotated.getPixel(i, j);
    float I = (Color.red(pixel) + Color.blue(pixel) + Color.green(pixel)) / 765.0f;
    values.add(new Entry((int) waveLength, I));
    Log.d("[SPECTRAl]", " WAVE:  " +waveLength + "  I: " + I);
   // i += 4;
}

首先,您需要将 int 转换为 float 更改为以下行,因为该库将浮点值作为输入:

values.add(new Entry((float) waveLength, I)); 

相反,您可以移除投射,因为您的波长已经是一个浮点数:

values.add(new Entry(waveLength, I));

其次:values.add(new Entry(100, 6));这一行作为values.add(new Entry(x, y));

所以你需要给图表适当的 x 值和相应的 y 值来生成图表。如果在 n 处的 x 值(这里 n 是条目索引)等于或小于在 n-1 处的 x 值,则 x 值应该按正确的顺序创建图表,那么您将无法生成图表。 因此,按照我描述的图表修复上述 for 循环的代码将正常工作。祝你好运:)

【讨论】:

    【解决方案2】:

    对于任何寻找的人,请确保条目按 X 升序排序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      相关资源
      最近更新 更多