我想创建一个带有时间表的小型应用程序。但是由于某种原因,当我在图表中添加很多点时,它几乎不会出现,尽管只有很少的点,一切正常。
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();
}
答案 0 :(得分:0)
以下代码创建问题:
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转换为以下行,因为此库将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在n处的值(此处n是入口索引)在任何时候都等于或小于x在n-1处的值,则x值应按正确的顺序创建图表。图表。 因此,按照我描述的方法修复上面的for循环代码将可以正常工作。祝你好运:)
答案 1 :(得分:0)
对于任何人,请确保条目按 X 升序排序