遅い回答ですが、他の人にも役立つかもしれません。
特に私はJavaの初心者であるため、この問題にも苦労しました。カスタムフォーマッタを実装しました。少し醜い解決策のようですが、うまくいきます。アイデアは次のとおりです。
- 値に Y 軸のみを使用し、X 軸を配列のインデックスとして残します (Androidplot チュートリアルが示唆するように、ArrayFormat.Y_VALS_ONLY を使用します。// Y_VALS_ONLY は要素インデックスを x 値として使用することを意味します)
- データが変更されるたびに、X 軸の新しいデータを含む新しいフォーマッタを Plot に渡す必要があります。
ここにいくつかのコードスニペットがあります。
1 つ目は、配列インデックスをカスタム ラベル文字列に変換するクラスです。
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 値が同じである場合、奇妙な結果が得られる可能性があります。この問題については、既に助けを求めています。