随着AndroidPlot网站的关闭,我有点陷入这个问题。已经提出了几个类似的问题,但没有一个得到适当的回答,所以我在这里。
我想知道如何重新标记我的X轴。例如,如果我想绘制关于月度数据的值,我会将其绘制为Januari的(1, 82)
,Februari的(2,67)
,依此类推。之后,我想将X标签从[1, 2, 3, ...]
更改为x_labels = ["Januari", "Februari", ...]
。我怎么能这样做?
哦,请提供一个答案x_labels
可以是什么(如果有一些特定的月度标签方法,你永远不知道)。
任何可以提供帮助的人? 谢谢!
答案 0 :(得分: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);
}
}
答案 1 :(得分:3)
我使用了@Aegonis编写的代码,并为设置String
标签制作了完整的代码。
我在这种情况下使用了这3个数组。
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());