2017-02-19 29 views
0

折れ線グラフの場合、1つのxのy値が複数ある場合、最後のxでない限り正常に動作します。最後のxの場合は、最初のエントリのみが表示されます。これには既知の回避策がありますか?MPAndroidChartの単一のxに複数のy値を表示

例:第二のタイムスタンプがコメントアウト

//firstTimestamp is earlier than secondTimestamp 

data.add(new Entry(firstTimestamp, 10)); 
data.add(new Entry(firstTimestamp, 20)); //won't show unless you uncomment below 
data.add(new Entry(firstTimestamp, 30)); //won't show unless you uncomment below 

//data.add(new Entry(secondTimestamp, 40)); 

グラフ:彼らがなかったのに対し、非コメント第二のタイムスタンプと

グラフ(20及び30は、現在含まれていることに注意してください前):

編集:私は、私はこの問題の原因を見つけたし、これまで

public abstract class BarLineScatterCandleBubbleRenderer extends DataRenderer { 

    // ... lines removed ... // 

    public void set(BarLineScatterCandleBubbleDataProvider chart, IBarLineScatterCandleBubbleDataSet dataSet) { 
     float phaseX = Math.max(0.f, Math.min(1.f, mAnimator.getPhaseX())); 

     float low = chart.getLowestVisibleX(); 
     float high = chart.getHighestVisibleX(); 

     Entry entryFrom = dataSet.getEntryForXValue(low, Float.NaN, DataSet.Rounding.DOWN); 
     Entry entryTo = dataSet.getEntryForXValue(high, Float.NaN, DataSet.Rounding.UP); 

     min = entryFrom == null ? 0 : dataSet.getEntryIndex(entryFrom); 
     max = entryTo == null ? 0 : dataSet.getEntryIndex(entryTo); 
     range = (int) ((max - min) * phaseX); 
    } 

    // ... lines removed ... // 
} 

を変更することで、次のようにそれを修正することができ

信じて、私は問題を解決すると信じています:

public abstract class BarLineScatterCandleBubbleRenderer extends DataRenderer { 

    // ... lines removed ... // 

    public void set(BarLineScatterCandleBubbleDataProvider chart, IBarLineScatterCandleBubbleDataSet dataSet) { 
     float phaseX = Math.max(0.f, Math.min(1.f, mAnimator.getPhaseX())); 

     float low = chart.getLowestVisibleX(); 
     float high = chart.getHighestVisibleX(); 

     Entry entryFrom = dataSet.getEntryForXValue(low, Float.NaN, DataSet.Rounding.DOWN); 

     //my edits here 
     int indexTo = dataset.getEntryIndex(high, Float.NaN, DataSet.Rounding.UP); 
     List<Entry> values = dataset.getValues(); 
     while (indexTo + 1 < values.size() && values.get(indexTo + 1).getX() == high) { 
      indexTo++; 
     } 
     Entry entryTo = values.get(indexTo); 
     //my edits end here 

     min = entryFrom == null ? 0 : dataSet.getEntryIndex(entryFrom); 
     max = entryTo == null ? 0 : dataSet.getEntryIndex(entryTo); 
     range = (int) ((max - min) * phaseX); 
    } 

    // ... lines removed ... // 
} 

これらをサブクラス化して使用するにはどうすればよいですか?

+0

私はあなたが答えを受け入れた気づきました。あなたはそれを働かせましたか? –

+0

私は変更する必要のあるクラスまですべてのクラスを複製して、元のパッケージのクラスの代わりにそれらを使用しました。 jarメソッドを動作させることができませんでした。 – user7588928

+0

よろしくお願いします。今日は誰か助けてくれました。 –

答えて

0

LineChartエントリの唯一のサポートされている使用例は、の昇順のを追加することです。これはthe wikiに記載されています:

このライブラリは正式に昇順的にエントリのx位置によってソートされていないエントリーリストから折れ線グラフの描画データをサポートしていないことに注意してください。

この理由は、レンダラが一意の昇順エントリに最適化されているためです。

この問題を回避したい場合は、LineChartRendererのソースをご覧ください。ブレークポイントを配置して、実証された方法でレンダリングさせる問題を見つけなければなりません。次に、レンダラーをサブクラス化して要件を満たすことを検討できます。基本的には、余分なユースケース(一意でない値)をサポートするために最適化を削除することになります。

EDIT:既存のオブジェクトグラフを操作して希望の動作を得ようとしない場合は、変更したライブラリをフォークすることを検討してください。その後、あなたのフォークの.jarを構築し、Androidプロジェクトに組み込むことができます。同じについては、以下の答えの手順を参照してください:

How to make a .jar from an Android Studio project

How to add a .jar as a library in Android Studio

+0

また、[この質問](https:// stackoverflow。com/questions/40532564/mpandroidchart-creating-closed-chart-circular-line-chart)を参照してください。 –

関連する問題