2015-07-31 1 views
0

Моя диаграмма еще не работает, но это не важно, поскольку я собираюсь по одному элементу за раз. Как писал в мой последний вопрос, вот данные я работаю с:Как установить домен X для вложенного значения

{ 
    "chartData":[ 
     { 
      "vId":307, 
      "vNm":"Alejandro Rivera Ulloa", 
      "values":[ 
       {"period":"2015-01","amount":37,"id":132}, 
       {"period":"2015-02","amount":38,"id":133}, 
       {"period":"2015-03","amount":33,"id":134} 
      ] 
     }, 
     { 
      "vId":308, 
      "vNm": "Daniel Torres", 
      "values": [ 
       {"period":"2015-01","amount":41,"id":135}, 
       {"period":"2015-02","amount":41,"id":136}, 
       {"period":"2015-03","amount":41,"id":137} 
      ] 
     }, 
     { 
      "vId":309, 
      "vNm": "Pablo Alvarez Garcia", 
      "values":[ 
       {"period":"2015-01","amount":16,"id":138}, 
       {"period":"2015-02","amount":17,"id":139}, 
       {"period":"2015-03","amount":14,"id":140} 
      ] 
     }, 
     { 
      "vId":391, 
      "vNm":"Janette Avalos de Conte", 
      "values":[ 
       {"period":"2015-01","amount":28.5,"id":141}, 
       {"period":"2015-02","amount":29,"id":142}, 
       {"period":"2015-03","amount":27.5,"id":143} 
      ] 
     } 
    ] 
} 

Все нормально там, и мой код загружает данные просто отлично. Это Еогеасп, что позволяет мне получить все и везде (проще говоря):

data.chartData.forEach(function(kv){ 
    var vNmName = kv.vNm; 
    var vIdName = kv.vId; 
    kv.values.forEach(function(d){ 
     d.period = d.period; 
     d.id = d.id; 
     d.amount = +d.amount; 
     d.vNm = vNmName; 
     d.vId = vIdName; 
    }); 
}); 

Итак, вот что мне нужно. Мой домен X отображается неправильно, и я знаю почему. Это строка кода:

x.domain(data.chartData[0].values.map(function(d) { return d.period; })); 

И эта линия дает мне только те периоды, именно то, что он должен делать, как только обращается к первому элементу chartData. Вот JSFiddle со всеми код: Fiddle

+0

Итак, для домена x, который будет отображаться правильно, что должно быть другим - я не понимаю проблему. –

+0

Проблема в том, что мне нужно ВСЕ показанные периоды, а не только три из первого элемента. @SamH. –

+0

все периоды одинаковы - как вы можете сказать, что они не получают все из них? –

ответ

1

Чтобы ответить на ваш непосредственный вопрос, как насчет:

var xDomain = [] 
data.forEach(function(d){ 
    d.values.forEach(function(v){ 
     if (xDomain.indexOf(v.period) === -1){ 
      xDomain.push(v.period); 
     } 
    }); 
}); 
xDomain.sort(); 
x.domain(xDomain); 

клещей дисплей NAN, потому что вы использовали неправильный формат:

var xAxis = d3.svg.axis() 
    .scale(x) 
    .orient("bottom") 
    .outerTickSize(0); 
    //.tickFormat(d3.format("d")); //<-- this says convert to integer, your string dates don't convert to integer 

Изменено fiddle ,

+0

Ты лучший. Огромное спасибо. –