2016-08-25 2 views
0

Я хочу добавить следующее вид данных (может быть любое количество таких пар под 1000) на вновь введенной таймсерии диаграммы в библиотеке MPAndroidChartКак обрабатывать временные ряды в MPAndroidChart?

Value : 50.0 at 1472112259 
Value : 49.0 at 1472112294 
Value : 50.0 at 1472112329 
Value : 50.0 at 1472112360 
Value : 50.0 at 1472112392 

следующие данные будут извлекаться из массива. Прямо сейчас, я думаю, есть некоторая беспорядок с отметками времени. Полный текст: https://gist.github.com/utkarshns/e1723dcc57022fcd392bc3b127b6c898

Временные метки UNIX будут проанализированы до требуемого формата времени после того, как я смогу успешно добавить значения в график.

В настоящее время проблема, с которой я сталкиваюсь, заключается в том, что временные метки, вероятно, обрезаются, а значения перезаписываются, что приводит к довольно перепутанному графику с действительно странными значениями оси x.

Update: Скриншоты: http://imgur.com/a/dGfmz

+0

Вы можете публиковать скриншот того, как он выглядит? – TR4Android

+0

одну секунду, я обновлю вопрос на скриншот –

+0

Я посмотрел на первый снимок экрана, и все, кажется, в порядке со мной. Что, собственно, проблема? – TR4Android

ответ

1

Проблема в том, Float значения не может содержать очень большие числа и все еще быть точной, так что вам нужно отдельный список с этими значениями времени штемпеля. BigDecimal должно быть в порядке. Для расстояний в зависимости от промежутка времени. Просто перейдите от даты начала до конца, указав количество времени, которое у вас есть, и добавьте запись с подсчетом от отметки времени, которую вы хотите получить.

Long myValues[] = {1472112259L, 1472112294L, 1472112329L, 1472112360L, 1472112392L};// your values 

    ArrayList<Entry> values = new ArrayList<>();// Entry List 
    Long start = 1472112259L;//start 
    Long end = 1472112392L;//end 
    List<BigDecimal> mList = new ArrayList<>(); //Decimal list which holds timestamps 
    int count = 0; 

    for (Long i = start; i <= end; i++) { 

     mList.add(new BigDecimal(i)); 
     if (myValues.equals(i)) { 
      values.add(new Entry(count, 50)); 
     } 
     count++;//always increment 
    } 

И ваш ValueFormatter должен выглядеть следующим образом:

AxisValueFormatter() { 

    private FormattedStringCache.Generic<Long, Date> mFormattedStringCache = new FormattedStringCache.Generic<>(new SimpleDateFormat("HH:mm:ss")); 
    @Override 
    public String getFormattedValue (float value, AxisBase axis){ 

      return mFormattedStringCache.getFormattedValue(new Date(mList.get((int)value).longValueExact()*1000), value); 
    } 

    @Override 
    public int getDecimalDigits() { 
     return 0; 
    } 
} 

Если у Вас возникли вопросы или что-то непонятно, я буду рад помочь.

Смежные вопросы