Поздний ответ, но, возможно, будет полезен другим людям.
У меня тоже были проблемы с этой проблемой, тем более что я новичок в Java.
Я реализовал пользовательский форматер. Кажется немного уродливым решением, но оно работает. Идея заключается в следующем:
- взять только ось Y для значений и оставить ось X в качестве индексов в массиве (как подсказывает учебник по Androidplot, использование ArrayFormat.Y_VALS_ONLY, // Y_VALS_ONLY означает использование индекса элемента в качестве значения x)
- каждый раз, когда ваши данные изменяются, вам нужно передать на график новый форматер с новыми данными для оси X
Вот некоторые фрагменты кода.
Первый - это класс, который преобразует индекс массива в пользовательскую метку. Строка:
public class MyIndexFormat extends Format {
public String[] Labels = null;
@Override
public StringBuffer format(Object obj,
StringBuffer toAppendTo,
FieldPosition pos) {
// try turning value to index because it comes from indexes
// but if is too far from index, ignore it - it is a tick between indexes
float fl = ((Number)obj).floatValue();
int index = Math.round(fl);
if(Labels == null || Labels.length <= index ||
Math.abs(fl - index) > 0.1)
return new StringBuffer("");
return new StringBuffer(Labels[index]);
}
А вот как я прикрепляю его к сюжету:
MyIndexFormat mif = new MyIndexFormat ();
mif.Labels = // TODO: fill the array with your custom labels
// attach index->string formatter to the plot instance
pricesPlot.getGraphWidget().setDomainValueFormat(mif);
Этот прием также работает для динамических обновлений.
ВНИМАНИЕ: на Androidplot, похоже, возникают проблемы с рисованием горизонтальных линий, поэтому, если ваши данные имеют одинаковые значения Y, вы можете получить странные результаты, я уже обратился за помощью по этому вопросу.