我更改了示例代码SimpleXYPlotActivity以格式化域名标签,如下所示:
{{1}}
我不知道为什么,但是情节打印以下域名标签: 1,2,3,5,6,8,9,11,12,13 而不是正确的价值观...... 1,2,3,6,7,8,9,10,13,14
为什么会出现这种疯狂行为?
答案 0 :(得分:1)
首先,当我运行上面的代码时,根本没有打印任何标签。但如果我更换:
return new StringBuffer(day);
使用:
return toAppendTo.append(day);
然后出现标签。继续......
您的格式化程序正在截断与每个域标记标签关联的浮点x-val。这个浮点组件的原因是因为在实例化SimpleXYSeries时指定了自己的xVals。我怀疑你真正想要的只是指定iVals,因为你实际上并没有在任何地方创建xVals。
我做了这些改变:
首先,创建你的XYSeries实例,从iVals创建xVals,如下所示:
XYSeries series1 = new SimpleXYSeries(Arrays.asList(series1Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series1");
XYSeries series2 = new SimpleXYSeries(Arrays.asList(series2Numbers),SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series2");
接下来,更新域格式化程序以使用域标签查找数组,如下所示:
plot.setDomainValueFormat(new Format() {
@Override
public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
int i = Math.round(((Number) obj).floatValue());
return toAppendTo.append(domainLabels[i]);
}
@Override
public Object parseObject(String source, ParsePosition pos) {
return null;
}
});
对于任何想知道为什么首先将obj转换为浮点数然后在用作iVal之前舍入为int的人:这是避免将浮点值转换为int值时发生的自然地板行为所必需的。例如,如果你在Double表示为1时调用intValue,你会得到0,因为在内部它表示为0.99999999 ...并且通过转换得到0而不是向上舍入为1.