在AndroidPlot中设置轴值

时间:2014-04-30 10:18:24

标签: android label axis androidplot

我正在尝试使用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);
}

}

问题在于我真的不明白它是如何工作的,我不知道如何使它适应我的需要。

提前致谢!

1 个答案:

答案 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;
}