2014-01-05 2 views
1

enter image description hereФлот-диаграмма не нарисовать мои очки

На этом снимке проблема не решена. Я пытаюсь нарисовать график с данными датчиков как мои точки (X, y). Когда загружается веб-страница, он считывает файлы csv и отправляет эти данные на вызов ajax из моего кода. Это то, что возвращает мой код:

var myData = new Stats { 
       Time = dataContainer.time, 
       LhXVals = dataContainer.lhXVals, 
       LhYVals = dataContainer.lhYVals, 
       LhZVals = dataContainer.lhZVals, 
       RhXVals = dataContainer.rhXVals, 
       RhYVals = dataContainer.rhYVals 
      }; 

Вот как выглядит мой класс Stats. Я анализирую данные и сохраняю их в списках. enter image description here

Затем я отправляю это на вызов ajax. Вот моя функция успеха Аякса:

 var time = new Array(); 
     var lhXVals = new Array(); 
     var cumulative = new Array(); 
     var data2; 

success: function (result) { 
         time = result.d.Time; //Time is a List<double> 
         lhXVals = result.d.LhXVals; //Left-Hand-X-Values is a List<double>, both are the same size 

         //check if time and lhXVals are empty, if not proceed 
         if (time.length > 0 || lhXVals.legnth > 0) { 
          for (var i = 0; i < time.length; ++i) { 
           //only grabbing little bit of data just to test, 
           //only taking first 2 elements 
           if (i == 6) 
            break; 
           //use the time data ex:(510.2838439) as my X-axes 
           //use the left-hand-X-Values ex:(23.9384384) as my Y-axes 
           debugger; 
           cumulative.push([parseFloat(time[i]), parseFloat(lhXVals[i])]);//data2 was a manually populated example i used before 
           data2 = [[4.53123342, 0], [4.9039293, 24.89323233], [6, 0], [6, -12.134], [8, 0], [8, 6.932]]; 

           //an index in the "cumulative" array would look like this: 
           // [0]: [510.2838439,23.9384384] 
          } 
         } 
         updateOnce(cumulative); 

функция updateOnce(cumulative); принимает мой совокупный массив точек, которые я использую в flot.setData() метод, чтобы нарисовать новый график.

function updateOnce(cumulative) { 
       debugger; 
       plot.setData([cumulative]); 
       plot.draw();//draws nothing 
      } 

Однако большая проблема заключается в том, что, когда plot.draw(); получает обращается нет ничего на моем графике, и я понятия не имею, почему. Я пробовал все, что мог придумать. Я попытался разобрать данные для float и оставить его, но ничего не меняя. Мои данные в «кумулятивном» хранятся точно так же, как ручной массив (var data), который я создал для графических точек, но он просто не работает, и я вытягиваю свои волосы.

EDIT Комментарий ниже. Я изначально поставил его так:

function updateOnce(cumulative) { 
       debugger; 
       plot.setData([cumulative]); 
       plot.draw(); //draws nothing 
      } 

      //implementing getData Last 
      var plot = $.plot("#placeholder", [getData()], { 
       series: { 
        shadowSize: 0 // Drawing is faster without shadows 
       }, 
       yaxis: { 
        min: -50, 
        max: 50 
       }, 
       xaxis: { 
        show: true 
       } 
      }); 

я возвращаю данные, которые вручную задать массив точек (х, у), так что будет что-то нарисовать первый на графике, что он делает. Затем, когда ajax, наконец, возвращает некоторые данные, я инициирую перерисовку с возвращенными данными.

+1

Как вы изначально рисуете график? Вам нужно будет вызвать 'plot.setupGrid()' после 'setData', чтобы пересчитать ваши оси. – Mark

+0

Я добавил начальную настройку в вопрос внизу – user1084319

+0

вы можете написать это как ответ, чтобы я мог его принять? Я не понимал, что это изменило ось, как только я добавил .setupGrid(), она сработала: P. Спасибо, много! – user1084319

ответ

3

Если смена осей min/max на звонке setData, необходимо вызвать plot.setupGrid() для пересчета осей. Из documentation, Bolding шахты:

УстановитьДанные (данные)

Вы можете использовать это, чтобы сбросить данные, используемые. Обратите внимание, что масштабирование оси, тиков, легенда и т. Д. Не будет пересчитана (используйте setupGrid(), чтобы сделать , что). Вы, вероятно, захотите снова вызвать draw().

Вы можете использовать эту функцию для ускорения перерисовки небольшого участка, если вы знаете, что оси не меняются. Поместите новые данные с помощью setData (newdata), call draw(), и вам хорошо идти. Обратите внимание, что для больших наборов данных почти все время потребляется в draw(), начерчивая данные , поэтому в этом случае не беспокойтесь.

setupGrid()

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

Обратите внимание, что из-за модели рисования холста, эта функция немедленно перекроить (фактически снова вставить в DOM) этикетки и легенда, но не фактические клещ линии, потому что они нарисованы на холсте , Вы должны вызвать draw(), чтобы получить перетаскивание холста.

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