android studio mp chart将x轴值设置为sql数据库条目

cotxawn7  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(386)

我想在android studio的mp图表中设置我的x轴值。我想把这个值设置为时域数据。我有一个sql数据库,其中包含一组数据以及每个数据的时间戳。我想把我的轴从第一个数据点左边的小时和分钟开始。因此,以右边的最后一个数据点结束。
目前我的x轴只是一个增量计数。我希望将每个数据点x值设置为:
hour:minute:秒
例如 18:53:29 我的sql数据库条目7将时间存储为字符串,格式为:
下面是我的图形函数: java SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); ```
private void Graph(){
float x =0;
ArrayList board_values = new ArrayList<>();
ArrayList board_yAXES = new ArrayList<>();

    XAxis xAxis = local_linechart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    Cursor data;
    data = BLE_DB.showData_Filtered();//Initialise

    data.moveToFirst();

    for (int i = 0; i < data.getCount(); i++) {
        //Counter
        if (Data_Spinner_value.equals("T1")) {
            float yaxis = Float.parseFloat(valueOf(data.getString(1)));
            data.moveToNext();
            x = x + 1;//Move to next Id
            board_yAXES.add(new Entry(yaxis, i));
            board_values.add(new Entry(x, yaxis));
        } else if (Data_Spinner_value.equals("T2")) {
            float yaxis = Float.parseFloat(valueOf(data.getString(2)));
            data.moveToNext();
            x = x + 1;//Move to next Id
            board_yAXES.add(new Entry(yaxis, i));
            board_values.add(new Entry(x, yaxis));
        } else if (Data_Spinner_value.equals("T3")) {
            float yaxis = Float.parseFloat(valueOf(data.getString(4)));
            data.moveToNext();
            x = x + 1;//Move to next Id
            board_yAXES.add(new Entry(yaxis, i));
            board_values.add(new Entry(x, yaxis));
        } else if (Data_Spinner_value.equals("T4")) {
            float yaxis = Float.parseFloat(valueOf(data.getString(5)));
            data.moveToNext();
            x = x + 1;//Move to next Id
            board_yAXES.add(new Entry(yaxis, i));
            board_values.add(new Entry(x, yaxis));
        } else if (Data_Spinner_value.equals("Pd")) {
            float yaxis = Float.parseFloat(valueOf(data.getString(6)));
            data.moveToNext();
            x = x + 1;//Move to next Id
            board_yAXES.add(new Entry(yaxis, i));
            board_values.add(new Entry(x, yaxis));
        }
    }
    LineDataSet set1;
    set1 = new LineDataSet(board_values, Data_Spinner_value);
    set1.setDrawIcons(false);
    set1.setDrawValues(false);
    set1.setDrawCircles(false);
    set1.setDrawCircleHole(false);
    set1.setColor(Color.DKGRAY);
    set1.setLineWidth(1f);

    ArrayList<ILineDataSet> dataSets = new ArrayList<>();
    dataSets.add(set1);
    local_linechart.getDescription().setText(sDay_of_week + " " + sDay + " " + sMonth + " " + sYear);

    LineData data_Series = new LineData(dataSets);
    local_linechart.setData(data_Series);
    local_linechart.invalidate();//Refresh the graph

}
所以我的问题是:如何将这个字符串更改为可以插入到要显示的值中的内容?
taor4pac

taor4pac1#

我假设您要更改xaxis标签,使它们看起来像“hh:mm:ss”,而不是“1、2、3”等。使用mpandroidchart库。
首先,您应该参考正在使用的mp android chart的文档,特别是valueformatter,它允许您更改轴上的标签。
根据文档,您必须为axis创建自己的valueformatter。
我要做的是:
创建一个arraylist来存储“hh:mm:ss”标签
在将数据添加到计数器的同时,还会创建一个与该计数器对应的“hh:mm:ss”标签(例如,如果x=0,则添加第一个标签,依此类推),这样,标签列表中的索引将与计数器值匹配。
完成计数器后,创建一个扩展valueformatter的类,并将标签列表传递给该类:

public class MyXAxisFormatter extends ValueFormatter {

    private ArrayList<String> labels = new ArrayList<>();

    public MyXAxisFormatter(ArrayList<String> labels) {
        this.labels = labels;
    }

    @Override
    public String getFormattedValue(float value) {
        return labels.get(Math.round(value));
    }
}

将valueformatter添加到图表中:

chart.getXAxis().setValueFormatter(MyXAxisFormatter())

将valueformatter附加到轴时,它会将getformattedvalue()返回的标签指定给轴上的计数器。
另外,不要在java中使用我的\变量命名。java使用camelcase作为编写方法、变量、类、包和常量名称的实践。所以,用boardvalues来代替board值,以此类推。

相关问题