AndroidPlot:设置X轴标签

5
由于 AndroidPlot 网站无法访问,我在这个问题上有些困扰。虽然已经有几个类似的问题被提出来了,但是没有一个得到了恰当的回答,所以我要提出这个问题。
我想知道如何重新标记我的 X 轴。例如,如果我想绘制关于每月数据的值,则可以像这样绘制:(1, 82) 代表一月,(2,67) 代表二月,以此类推。然后,我想将 X 标签从 [1,2,3,...] 更改为 x_labels = ["Januari", "Februari", ...] 。我应该怎么做?
顺便说一句,希望你能提供一个适用于任何 x_labels 的答案(如果有针对月份标签的特定方法,您永远不会知道)。
谁能帮帮忙呢?谢谢!
2个回答

8

我自己解决了:

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);
    }
}

你如何创建图表?我无法将字符串添加到系列的数组中。 - erdomester
@Aegonis:感谢您的帮助,我从您的答案中得到了提示,知道如何做到这一点。 - dakshbhatt21
setDomainValueFormat 方法不存在。 - NickUnuchek

3

我使用了 @Aegonis 写的代码,并编写了完整的用于设置 String 标签的代码。

在我的案例中,我使用了这三个数组。

Number[] yValues = {1, 3, 2 ,7 ,6};
Number[] xValues = {0, 1, 2, 3, 4};

final String[] xLabels = {"Jan", "Feb", "Mar", "Apr", "May"};

现在是扩展@Aegonis提供的Format类的代码。
class GraphXLabelFormat extends Format {

    @Override
    public StringBuffer format(Object arg0, StringBuffer arg1, FieldPosition arg2) {
        // TODO Auto-generated method stub

        int parsedInt = Math.round(Float.parseFloat(arg0.toString()));
        Log.d("test", parsedInt + " " + arg1 + " " + arg2);
        String labelString = xLabels[parsedInt];
        arg1.append(labelString);
        return arg1;
    }

    @Override
    public Object parseObject(String arg0, ParsePosition arg1) {
        // TODO Auto-generated method stub
        return java.util.Arrays.asList(xLabels).indexOf(arg0);
    }
}

现在是onCreate方法中的代码。
XYPlot plot = (XYPlot) findViewById(R.id.mySimpleXYPlot);

plot.setDomainLabel("TestDomain");
plot.setRangeLabel("TestRange");
plot.setTitle("Height/Weight");

//set domain labels as string [x-axis]
plot.getGraphWidget().setDomainValueFormat(new GraphXLabelFormat());

XYSeries series = new SimpleXYSeries(Arrays.asList(xValues), Arrays.asList(yValues), "Line");

plot.addSeries(series, new LineAndPointFormatter());

setDomainValueFormat 方法不存在。 - NickUnuchek
@NickUnuchek 可能已经被删除了,这个是7年前的,我最近没有检查过 :) - dakshbhatt21

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接