2017-02-19 27 views
0

對於折線圖,我發現如果對於單個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的來源。您將不得不放置斷點並找到導致它按照您演示的方式渲染的問題。然後,您可以考慮對渲染器進行子類化以符合您的要求。從本質上講,您將刪除優化以支持額外的用例(非唯一值)。

編輯:如果您不願意操作現有的對象圖來獲取所需的行爲,則可能需要考慮使用該更改分叉庫。然後,您可以構建您的分支的.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 /問題/ 40532564/mpandroidchart創造-A-封閉圖表圓形線-圖表)。 –

相關問題