AndroidPlot:在X轴上设置标签

随着AndroidPlot网站的关闭,我有点陷入这个问题。 已经提出了几个类似的问题,但没有一个得到适当的回答,所以我走了。

我想知道如何重新标记我的X轴。 例如,如果我想绘制关于月度数据的值,我会为Januari绘制它(2,67)对于Februari绘制(2,67) ,依此类推。 之后,我想将X标签从[1, 2, 3, ...]更改为x_labels = ["Januari", "Februari", ...] 。 我怎样才能做到这一点?

哦,请提供一个答案, x_labels可以是任何东西(如果有一些特定的月度标签方法,你永远不知道)。

谁可以帮忙? 谢谢!

自己想出来:

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

我使用了@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());