GraphView 格式标签丢弃一些非常大数据的数字
GraphView format label discard some digits for very big data
我正在使用 graphview 库并尝试将图表的标签格式化为 'HH' 格式的时间(从毫秒开始)。我将系列数据点的每个 x 值指定为毫秒,这确实很大,如“1.442440833138E12”。之后,我制作了如下所示的自定义 LabelFormatter:
@Override
public String formatLabel(double value, boolean isValueX) {
if (isValueX) {
SimpleDateFormat format = new SimpleDateFormat("HH");
Date date = new Date((long) value);
Log.i("formatLabel", Double.toString(date.getTime()));
return format.format(date);
} else {
return super.formatLabel(value, isValueX);
}
}
但是当我查看我的图表时,它与我输入的不一样,比如当我将毫秒设置为 07 小时时,图表显示 11 小时或 01 小时,因为我使用 setNumHorizontalLabels 进行了更改。所以我试图找出问题所在,当我将日志输出代码放在那个 formatLabel 方法中时,日志输出如下所示:
09-17 20:03:50.287 28093-28093/? I/formatLabel﹕ 1.44243E12
09-17 20:03:50.287 28093-28093/? I/formatLabel﹕ 1.44244E12
09-17 20:03:50.287 28093-28093/? I/formatLabel﹕ 1.44245E12
09-17 20:03:50.287 28093-28093/? I/formatLabel﹕ 1.44246E12
09-17 20:03:50.292 28093-28093/? I/formatLabel﹕ 1.44247E12
应该看起来像“1.442440833138E12”。我还尝试使用最小“12”位的数字精度制作自定义 DefaultFormatter,但结果相同。
有人可以向我解释为什么会这样吗?
-------------------------------------------- ----------------------------------
这是我将数据点添加到每个系列的代码。
DataPoint[] data1=new DataPoint[SIZE] ;
for(int i=0;i<SIZE;i++)
{
data1=new DataPoint(new Date(time),value) ;
//test whether x prints all full millisecond
Log.i("formatLabel", Double.toString(data1.getX()));
}
LineGraphSeries<DataPoint> series=new LineGraphSeries(data1) ;
当我给每个数据点的 x 值加上日期时看到日志输出,我得到
完整的毫秒表示法,例如“1.442440833138E12”。但是在我上面的自定义 formatLabel 实例中,它被截断了。我希望用户能更多地了解我的问题
清楚并给我一些解决方案...
您应该将 date/times 添加到这样的系列中:
series.appendData(new DataPoint(new Date(time), value), true, Integer.MAX_VALUE);
并像这样格式化标签:
graph.getGridLabelRenderer().setLabelFormatter(
new DateAsXAxisLabelFormatter(getActivity(),
SimpleDateFormat.getDateInstance(SimpleDateFormat.SHORT)) {
@Override
public String formatLabel(double value, boolean isValueX) {
if (isValueX)
return super.formatLabel(value, isValueX);
else
// format Y-axis label
}
});
(示例使用默认的短 SimpleDateFormat 实例)
查看您的标签格式化代码:无需为每个数据点实例化 SimpleDateFormat。
我正在使用 graphview 库并尝试将图表的标签格式化为 'HH' 格式的时间(从毫秒开始)。我将系列数据点的每个 x 值指定为毫秒,这确实很大,如“1.442440833138E12”。之后,我制作了如下所示的自定义 LabelFormatter:
@Override
public String formatLabel(double value, boolean isValueX) {
if (isValueX) {
SimpleDateFormat format = new SimpleDateFormat("HH");
Date date = new Date((long) value);
Log.i("formatLabel", Double.toString(date.getTime()));
return format.format(date);
} else {
return super.formatLabel(value, isValueX);
}
}
但是当我查看我的图表时,它与我输入的不一样,比如当我将毫秒设置为 07 小时时,图表显示 11 小时或 01 小时,因为我使用 setNumHorizontalLabels 进行了更改。所以我试图找出问题所在,当我将日志输出代码放在那个 formatLabel 方法中时,日志输出如下所示:
09-17 20:03:50.287 28093-28093/? I/formatLabel﹕ 1.44243E12
09-17 20:03:50.287 28093-28093/? I/formatLabel﹕ 1.44244E12
09-17 20:03:50.287 28093-28093/? I/formatLabel﹕ 1.44245E12
09-17 20:03:50.287 28093-28093/? I/formatLabel﹕ 1.44246E12
09-17 20:03:50.292 28093-28093/? I/formatLabel﹕ 1.44247E12
应该看起来像“1.442440833138E12”。我还尝试使用最小“12”位的数字精度制作自定义 DefaultFormatter,但结果相同。
有人可以向我解释为什么会这样吗?
-------------------------------------------- ----------------------------------
这是我将数据点添加到每个系列的代码。
DataPoint[] data1=new DataPoint[SIZE] ;
for(int i=0;i<SIZE;i++)
{
data1=new DataPoint(new Date(time),value) ;
//test whether x prints all full millisecond
Log.i("formatLabel", Double.toString(data1.getX()));
}
LineGraphSeries<DataPoint> series=new LineGraphSeries(data1) ;
当我给每个数据点的 x 值加上日期时看到日志输出,我得到 完整的毫秒表示法,例如“1.442440833138E12”。但是在我上面的自定义 formatLabel 实例中,它被截断了。我希望用户能更多地了解我的问题 清楚并给我一些解决方案...
您应该将 date/times 添加到这样的系列中:
series.appendData(new DataPoint(new Date(time), value), true, Integer.MAX_VALUE);
并像这样格式化标签:
graph.getGridLabelRenderer().setLabelFormatter(
new DateAsXAxisLabelFormatter(getActivity(),
SimpleDateFormat.getDateInstance(SimpleDateFormat.SHORT)) {
@Override
public String formatLabel(double value, boolean isValueX) {
if (isValueX)
return super.formatLabel(value, isValueX);
else
// format Y-axis label
}
});
(示例使用默认的短 SimpleDateFormat 实例)
查看您的标签格式化代码:无需为每个数据点实例化 SimpleDateFormat。