我想在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
}
所以我的问题是:如何将这个字符串更改为可以插入到要显示的值中的内容?
1条答案
按热度按时间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的类,并将标签列表传递给该类:
将valueformatter添加到图表中:
将valueformatter附加到轴时,它会将getformattedvalue()返回的标签指定给轴上的计数器。
另外,不要在java中使用我的\变量命名。java使用camelcase作为编写方法、变量、类、包和常量名称的实践。所以,用boardvalues来代替board值,以此类推。