2012-05-26 3 views
5

С закрытием веб-сайта AndroidPlot я как бы застрял в этой проблеме. Было задано несколько аналогичных вопросов, но ни один из них не получил должного ответа, поэтому я иду.AndroidPlot: установка меток на оси X

Я хотел бы знать, как я могу переставить мою ось Х. Например, если я хочу отображать значения о ежемесячных данных, я бы построил его как (1, 82) для Januari, (2,67) для Februari и т. Д. Впоследствии я хочу изменить X-метки от [1, 2, 3, ...] до x_labels = ["Januari", "Februari", ...]. Как я могу это сделать?

О, пожалуйста, предоставьте ответ, для которого x_labels может быть любым (в случае, если существует определенный метод для ежемесячных меток, вы никогда не знаете).

Любой, кто мог бы помочь? Спасибо!

ответ

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

Как вы создаете сюжет? Я не могу добавить строку к массиву в серию – erdomester

+0

@Aegonis: спасибо вам за помощь, я получил подсказку из вашего ответа о том, как это сделать. – dakshbhatt21

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

Теперь код класса, который расширяет Format предоставленный @Aegonis.

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()); 
Смежные вопросы