2012-10-23 3 views
1

jfree 차트 - StackedAreaChart에 문제가 있습니다.Jfree : 누적 영역 차트 0 값에서 겹칩니다.

문제는 하나의 양수 값과 다른 음수 값을 표시하려고합니다. 양수 값은 2011 년에 끝나고 2012 년부터 음수가 시작됩니다. 그러나 누적 영역 차트에서는 일정한 거리만큼 겹치게됩니다. 문제 및 필요한 해결책은 이미지를 참조하십시오.

아무도이 문제에 대한 해결책을 알고 있지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

enter image description here

+0

이 – GrahamA

+0

이봐 Graham..here 코드 제발 http://textuploader.com/?p :이 문제를 해결할 수 = 6 & id = NDVRU – Neeraj

답변

3

원판을 표시하는 일련의 데이터와 제 StackedXYAreaRenderer를 보유 할 TimeTableXYDataset 사용해보십시오. 당신이 당신의 예에서 차트를 만드는 데 사용되는 코드를 추가 할 수

import java.io.File; 
import java.io.IOException; 
import java.text.FieldPosition; 
import java.text.NumberFormat; 
import java.text.ParsePosition; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartUtilities; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.chart.renderer.xy.StackedXYAreaRenderer; 
import org.jfree.data.time.TimeTableXYDataset; 
import org.jfree.data.time.Year; 
import org.jfree.data.xy.TableXYDataset; 

public class StackedAreaChart2 { 

    public StackedAreaChart2() { 
     TimeTableXYDataset[] dataset = createDataset(); 
     createChart(dataset); 
    } 

    public TimeTableXYDataset[] createDataset() { 
     TimeTableXYDataset dataSet1 = new TimeTableXYDataset(); 

     dataSet1.add(new Year(2001), 1.0,"Series1"); 
     dataSet1.add(new Year(2002), 2.0,"Series1"); 
     dataSet1.add(new Year(2003),3.0,"Series1"); 
     dataSet1.add(new Year(2004),4.0,"Series1"); 
     dataSet1.add(new Year(2005),5.0,"Series1"); 
     dataSet1.add(new Year(2006),0,"Series1"); 

     dataSet1.add(new Year(2001), 6.0,"Series2"); 
     dataSet1.add(new Year(2002),3.0,"Series2"); 
     dataSet1.add(new Year(2003),4.0,"Series2"); 
     dataSet1.add(new Year(2004),3.0,"Series2"); 
     dataSet1.add(new Year(2005),9.0,"Series2"); 
     dataSet1.add(new Year(2006),0,"Series2"); 

     TimeTableXYDataset dataSet2 = new TimeTableXYDataset(); 
     dataSet2.add(new Year(2006),-2,"Series3"); 
     dataSet2.add(new Year(2007),-3,"Series3"); 
     dataSet2.add(new Year(2008),-4,"Series3"); 

     return new TimeTableXYDataset[] {dataSet1,dataSet2}; 
    } 

    public JFreeChart createChart(TableXYDataset[] dataset) { 
     final JFreeChart chart = ChartFactory.createStackedXYAreaChart("","","",dataset[0],PlotOrientation.VERTICAL,true,true,false); 
     XYPlot plot = (XYPlot) chart.getPlot();   
     StackedXYAreaRenderer renderer2 = new StackedXYAreaRenderer(); 
     plot.setDataset(1, dataset[1]); 
     plot.setRenderer(1, renderer2); 
     NumberAxis axis = (NumberAxis) plot.getDomainAxis(); 
     axis.setNumberFormatOverride(new NumberFormat(){ 

      @Override 
      public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { 
        SimpleDateFormat format = new SimpleDateFormat("YYYY"); 
        return toAppendTo.append(format.format(new Date((long) number))); 
       } 

      @Override 
      public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) { 
       return new StringBuffer(String.format("%s", number)); 
      } 

      @Override 
      public Number parse(String source, ParsePosition parsePosition) { 
       return null; 
      } 
     }); 
     return chart; 
    } 

    public void saveChart(JFreeChart chart, String fileLocation) { 
     String fileName = fileLocation; 
     try { 
      ChartUtilities.saveChartAsPNG(new File(fileName), chart, 1000, 600); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.err.println("Problem occurred creating chart."); 
     } 
    } 

    public static void main(final String[] args) { 
     final StackedAreaChart2 demo = new StackedAreaChart2(); 
     TableXYDataset[] categoryDataset = demo.createDataset(); 
     JFreeChart chart = demo.createChart(categoryDataset); 
     String fileLocation = "StackAreaChart.png"; 
     demo.saveChart(chart, fileLocation); 
     System.out.println("Pie Chart has been created successfully"); 
     System.out.println("Chart has been saved to: " + fileLocation); 
    } 

} 

enter image description here

+0

그레이엄에게 감사드립니다. 정말 도움이되었습니다. – Neeraj

관련 문제