2012-06-13 4 views
3

나는 달성하려는 작업이 상당히 일반적인 작업이어야한다고 생각하지만 작동시키기가 어렵습니다. 나는 단순히 여러 데이터 포인트와 함께 ISO8601 타임 스탬프를 (각 레코드에 대해) 포함하는 데이터 세트로부터 다중 시리즈 플롯을 만들고 싶다. 데이터는 JSON 형식이며 dojox.charting.chart "Lines"유형을 사용하고 있습니다.Dojo 다중 시리즈 및 공통 x 축이있는 JSON의 선형 차트

Dojo 차트가 ISO8601은 물론 시간 기반 축 데이터를 직접 처리 할 수 ​​없다는 것을 이미 알고 있습니다. 그래서 저는 이미 T0 서버 측 이후로 x 축을 밀리 초로 변환하는 것에 대해 다루었습니다.

[{"Offset_ms":0,"CP":250.58368,"TP":181.88211}, 
{"Offset_ms":360000,"CP":233.18443,"TP":119.94824}, 
{"Offset_ms":540000,"CP":227.15465,"TP":117.99422}, 
{"Offset_ms":720000,"CP":222.87495,"TP":117.55895}, 
{"Offset_ms":896000,"CP":218.19876,"TP":117.64221}, 
{"Offset_ms":900000,"CP":219.77487,"TP":117.93475}] 

그리고 증류수 자바 스크립트 (위의 JSON 변수 'sequenceData'에서 가정) :

var chart = new dojox.charting.Chart("sequenceDataGraph"); 

chart.addPlot("default", { 
    type: "Lines", 
    tension: "X" 
}); 
chart.addAxis("x", { labelFunc: labelTimeAxis }); 
chart.addAxis("y", { vertical: true }); 

var sequenceDataStore = new dojo.store.Observable(new dojo.store.Memory({ 
    data: { 
     label: "Sequence", 
     items: sequenceData 
    } 
})); 

addSequenceDataSeries(chart, sequenceDataStore, "TP"); 
addSequenceDataSeries(chart, sequenceDataStore, "CP"); 

chart.render(); 

function addSequenceDataSeries(chart, sequenceDataStore, sColumnName) { 
    chart.addSeries(sColumnName, new dojox.charting.StoreSeries(sequenceDataStore, { query: {} }, 
        sColumnName)); 
} 

은 무엇 것으로 보인다 여기

내 JSON의 증류 예를 발췌 한 것입니다 Dojo Chart는 x 축 데이터를 전혀 사용하지 않고 데이터 포인트 수에 따라 고정 된 간격으로 각 점을 그려야합니다. 즉, Offset_ms가 단지 1, 2, 3 인 경우와 같이 각 데이터 요소에 서수가 할당 된 것 같습니다. 내 데이터 포인트가 항상 이 아니고 고정 간격으로이므로 결과 그래프가 왜곡됩니다.

Dojo Chart에서 x 축 구성 요소의 JSON 데이터에서 "Offset_ms"필드를 사용하도록 지시하려면 어떻게합니까?

자습서와 API 문서를 훑어보고 수많은 Google 검색을 수행했습니다. Dojo 소스의 일부, 특히 StoreSeries.js.uncompressed.js를 찾아 보았지만 어떤 대답도 찾지 못했습니다. 분명히 이것은 가능하며, 사소한 일입니다!

답변

4

불행히도 공식 dojo 문서는 심각하게 부족하며 Dojo 소스를 탐색하여 비슷한 작업을 수행하는 방법을 알아 냈습니다. 특히 StoreSeries 테스트의 135 행 http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/charting/tests/test_StoreSeries.html

StoreSeries 생성자의 세 번째 인수는 X 및 Y 축을 데이터 저장소의 특정 필드에 매핑하는 객체를 허용합니다.

변경이에서 코드의 다음 줄이에

chart.addSeries(sColumnName, new dojox.charting.StoreSeries(sequenceDataStore, { query: {} }, 
       sColumnName)); 

가 :

chart.addSeries(sColumnName, new dojox.charting.StoreSeries(sequenceDataStore, { query: {} }, 
       { x: "Offset_ms", y: sColumnName })); 

sColumnName{ x: "Offset_ms", y: sColumnName }

+1

감사되고, 그것을 작동합니다! 후속 조치로서 '가치'라고하는 3 번째 ctor arg를 초기화하는 대체 방법에 대해 정확히 어떻게 알고 있어야합니까? Dojo API docs : "Object 핸들을 사용하여 상점 항목을 검사 할 수있는 출력을 생성하는 함수 또는 오브젝트에서 추출 할 이름과 출력에 맵핑하는 방법을 알려주는 사전 오브젝트. 문자열, 음모에 사용할 숫자 필드 이름입니다. 정의되지 않은 경우 null 또는 빈 문자열 (기본값), "값"필드가 추출됩니다. " - 좋습니다.하지만 사전 키/값이 될 수있는 것은 없습니다! – BrandonLWhite