MPAndroidChart - почему строка не отображается? - PullRequest
1 голос
/ 30 сентября 2019

Я хочу создать небольшое приложение с расписанием. Но по какой-то причине, когда я добавляю много точек на график, он просто не появляется, хотя с небольшим количеством точек все работает.

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

1 Ответ

0 голосов
/ 02 октября 2019

Следующие проблемы с созданием кода:

 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значения для генерации графика. Значения x должны быть в правильной последовательности для создания диаграммы, если значение x в n (здесь n - индекс входа) равно или меньше значения x в n-1 в любой точке, тогда вы не сможете сгенерироватьдиаграмма. Так что исправление кода цикла for, как я описал выше, будет работать правильно. Желаем удачи:)

...