2012-04-20 2 views
2

날짜별로 값이 표시되는 TimeSeries 차트가 있고 두 개의 다른 라인으로 표시되는 두 개의 시리즈가 있습니다. 문제는 특정 시리즈의 값이 특정 날짜에 포함되지 않는 경우가 있습니다. 이 경우 나는이 시리즈의 이전 지점에서 다음 지점으로 넘어갈 것이라고 가정한다. 불행히도 차트에서 올바르게 작동하지 않습니다. 뭔가 올바르게 그려지지 않은 것처럼 보입니다.JFreeChart : TimeSeries 차트에 여러 시계열이 잘못 표시되었습니다.

모든 시리즈에 적절한 날짜가 포함되어 있으면 괜찮습니다.

내 코드는 여기에 있습니다 :

for (String source : graphData.keySet()) { 
     SortedMap<LocalDate, BigDecimal> data = graphData.get(source); 
     LocalDate prevDate = null; 
     for (LocalDate date: data.keySet()) { 
      if (prevDate == null) { 
       prevDate = date; 
       continue; 
      } 
      dataset.add(new SimpleTimePeriod(prevDate.toDateMidnight().toDate(), date.toDateMidnight().toDate()), data.get(prevDate), source, true); 
      prevDate = date; 
     } 
     dataset.add(new SimpleTimePeriod(prevDate.toDateMidnight().toDate(), futureDate), data.get(prevDate), source, true); 
    } 

Map<String, SortedMap<LocalDate, BigDecimal>> graphData지도의 키는 일련의 이름을 모든 시리즈에 대한 데이터가 포함되어 있습니다. 그리고 말했듯이 시리즈 A에는 날짜 1, 2 및 3, 시리즈 B의 값이 1과 2 만 들어있는 경우가 있습니다.이 경우 A와 B의 라인이 제대로 보이지 않습니다 ...

그것을 고치는 쉬운 방법? B 시리즈의 누락 된 값을 선형 보간법을 사용하여 계산하여 데이터 세트에 넣는 방법은 실제로 구현하기가 매우 어렵습니다. 어쩌면 내가 놓친 것일까?

답변

1

해결 방법 알아보기 - 모든 시리즈는 고유 한 데이터 세트 및 렌더러입니다. 그런 다음 차트를 만들 때 하나의 데이터 집합을 사용하고 그 후에 모든 데이터 집합 및 렌더러를 추가합니다.

xyPlot.addDataset(0, firstDataset); 
xyPlot.addDataset(1, secondDataset); 

아니면 많은 시리즈가 될 수있는 경우 다음이

2

midpoint formula은 하나의 누락 된 세로 좌표를 대체하는 간단한 방법입니다.

+0

당신이 알고주기에 그것을하는 것이 좋습니다, 나는 고정 된 서로 다른 데이터 세트 및 렌더러에 내 시리즈를 이동하여. 그것은 – javagirl

+0

우수했습니다; 접근법이 어떻게 도움이되었는지 자세히 설명하는 또 다른 답변을 추가 할 수 있습니다. – trashgod

관련 문제