我正在尝试使用AndroidPlot绘制时修改X轴的值。 这是因为我试图表示音频频谱的FFT,我希望X轴显示不同的频率。 建议在文档中使用:
SimpleXYSeries.ArrayFormat.Y_VALS_ONLY
使用元素索引作为x值,但这不是我需要的。
我需要执行以下操作来转换轴 f = i * Fs / N. 为Fs,采样率为Hz和N,即FFT中的点数。
我知道我需要创建一个新的格式化程序,我已经检查了几个这样的例子,
this.getGraphWidget().setDomainValueFormat(new GraphXLabelFormat());
// ...
private class GraphXLabelFormat extends Format {
private static LABELS = ["Label 1", "Label 2", "Label 3"];
@Override
public StringBuffer format(Object object, StringBuffer buffer, FieldPosition field) {
int parsedInt = Math.round(Float.parseFloat(object.toString()));
String labelString = = LABELS[parsedInt];
buffer.append(labelString);
return buffer;
}
@Override
public Object parseObject(String string, ParsePosition position) {
return java.util.Arrays.asList(LABELS).indexOf(string);
}
}
问题在于我真的不明白它是如何工作的,我不知道如何使它适应我的需要。
提前致谢!
答案 0 :(得分:0)
默认情况下,自定义Format的格式(Object,StringBuffer,FieldPosition)方法的“object”字段对应于等式中的“i”。因此,您应该能够做到这样的事情:
@Override
public StringBuffer format(Object object, StringBuffer buffer, FieldPosition field) {
int i = Math.round(Float.parseFloat(object.toString()));
// assumes 'freqHz' and 'samples' (your array or list of of underlying samples) is
// within scope of this method call:
String thisFreq = i * (freqHz / samples.length);
buffer.append(thisFreq + "Hz");
return buffer;
}