4

私は実際に AndroidPlot ライブラリを使用して、Android プロジェクトで単純なチャートを使用していますが、ドメイン ゾーンの値を変更する方法がわかりません。

より具体的には、この行:

mySimpleXYPlot.setDomainValueFormat(new DecimalFormat("#"));

Web サイトでは、別の形式を使用できると書かれており、それは本当ですが、たとえば次のように使用すると:

SimpleDateFormat("dd-MM-yyyy")

グラフでは、すべてのドメイン値に「1969年 12 月 31 日」が表示されます。

その日付を変更する方法を知っている人はいますか? または別の形式(文字列など)を使用しますか?

4

1 に答える 1

4

遅い回答ですが、他の人にも役立つかもしれません。

特に私は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 値が同じである場合、奇妙な結果が得られる可能性があります。この問題については、既に助けを求めています。

于 2012-02-03T09:31:47.057 に答える