2011-07-21 9 views
4

私はAndroidPlotライブラリを使って、アンドロイドプロジェクトで簡単なグラフを使用していますが、どのようにドメインゾーンの値を変更できるのか分かりません。AndroidPlot:どのようにドメインデータを変更できますか?

より具体的に、この行:

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

ウェブサイトでは、私はその真を別のフォーマットを使用してできることを言ったが、私は、たとえば使用する場合:チャートで

SimpleDateFormat("dd-MM-yyyy") 

が表示されます。 "31-12-1969"すべてのドメイン値。

誰かがその日付をどのように変更できるか知っていますか?または別の形式(Stringなど)を使用しますか?

答えて

4

遅くとも、他の人には役に立つかもしれません。

私はこの問題で苦労しました。特に、私はJavaの初心者です。 カスタムフォーマッタを実装しました。少し醜い解決策と思われるが、それは動作します。考え方は以下の通りである:Androidplotチュートリアルが示唆するように

  • はArrayFormat.Y_VALS_ONLYを使用して、(使用する値についてのみ、Y軸を取り、アレイへのインデックスとしてX軸を残し、// 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値が同じ場合は、奇妙な結果が得られる可能性があります。

+0

ありがとうMartin: – K1988

+0

ありがとうございます。 –

+0

@Martinは、水平線の問題の言葉ですか?知らない人にとっては、水平線をプロットすると(プロットのy値はすべて0です)、プロットはグラフに表示されませんが、水平線ではない別のプロットがある場合は、水平線が表示されます。 – whyoz

関連する問題