2014-12-01 2 views
0

다른 예제를 살펴 보았지만이 질문에 대한 답을 찾지 못했습니다. 자바에서 jFreePanel을 사용하고 있습니다. X 축에 연도 변경 표시 (예 : 2005, 2006, 2007 등)라는 선 차트를 만들려고합니다. 데이터는 매일 취해진 판독 값으로 구성되어 있으므로 각 데이터를 표시 할 수는 없지만이를 연도별로 분해하는 것은 매우 합리적입니다. 나는 그것을하는 방법을 알아 내려고 애 쓰고있다.jFreePanel을 사용하여 꺾은 선형 차트에서 X 축에 연도 추가

그래서, 대신에

X-axis __________________________________________________________________________________ 

           2000-01-01 to 2009-06-30 
그것은 다음과 같아야합니다

...

X-axis __________________________________________________________________________________ 
     2000  2001  2002 2003 2004 2005 2006 2007 2008 2009 
           2000-01-01 to 2009-06-30 

관련 코드는 여기에 ...

private JFreeChart createChart(final CategoryDataset dataset) { 

    // create the chart... 
    final JFreeChart chart = ChartFactory.createLineChart(
     site,      // chart title 
     firstDate + " to " + DBChart.lastDate, // domain axis label 
     "Height",     // range axis label 
     dataset,     // data 
     PlotOrientation.VERTICAL, // orientation 
     false,      // exclude legend 
     false,      // tooltips 
     false      // urls 
    ); 

    chart.setBackgroundPaint(Color.white); 

    final CategoryPlot plot = (CategoryPlot) chart.getPlot(); 
    plot.setBackgroundPaint(Color.lightGray); 
    plot.setRangeGridlinePaint(Color.white); 

    // Customize the range axis... 
    final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); 
    chart.getCategoryPlot().getRangeAxis().setRange(getLowestLow(data), getHighestHigh(data)); 
    rangeAxis.setAutoRangeIncludesZero(false); 

    // Customize the renderer... 
    final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer(); 
    renderer.setSeriesShapesVisible(0, false); 

    return chart; 
} 

private double getLowestLow(Object data[][]) { 
    double lowest; 
    lowest = Double.parseDouble(data[0][2].toString()); 
    System.out.println(lowest); 
    for (int i = 1; i < data.length - 1; i++) { 
     if (data[i][2] != null) { 
      if (Double.parseDouble(data[i][2].toString()) < lowest) { 
       lowest = Double.parseDouble(data[i][2].toString()); 
      } 
     } 
    } 

    return lowest; 
} 

private double getHighestHigh(Object data[][]) { 
    double highest; 
    highest = Double.parseDouble(data[0][2].toString()); 
    for (int i = 1; i < data.length - 1; i++) { 
     if (data[i][2] != null) { 
      if (Double.parseDouble(data[i][2].toString()) > highest) { 
       highest = Double.parseDouble(data[i][2].toString()); 
      } 
     } 
    } 
    return highest; 
} 

감사의 ... 다른 스레드에서 Y 축을 사용자 정의 할 수는 있지만 X 축으로 원하는 작업을 수행하는 방법에 대한 정보는 찾지 못하고 사용하지도 않았습니다. 이 라이브러리를 전에. 어떤 도움을 주시면 감사하겠습니다.

+0

설명하는 문제가있는 [전체 예제] (http://stackoverflow.com/help/mcve)를 포함하여 질문을 편집하십시오. – trashgod

+0

@trashgod 나는 그것이 도움이되기를 바랍니다. – Iakona

+0

응답을 얻지 못했기 때문에 상사와 JFreeChart 개발자 가이드를 구입할 수있었습니다. 누구든지 비슷한 것을 성취해야한다면 필자는 그것이 필요하다고 생각합니다. 그들은 다른 그래프의 예제를 많이 가지고 있으며 그래프를 어떻게 생성했는지 볼 수 있도록 코드를 제공합니다. 자바로 많은 그래프를 작성한다면이 가이드를 적극 추천합니다. – Iakona

답변

1

ChartFactory.createLineChart 대신, createTimeSeriesChart()을 고려하십시오. 그런 다음 here과 같이 setDateFormatOverride()을 사용하여 자연스럽게 날짜 축의 서식을 지정할 수 있습니다.

DateAxis axis = (DateAxis) plot.getDomainAxis(); 
axis.setDateFormatOverride(new SimpleDateFormat("HH:mm")); 

다중 선 축에 대해 확실하지 않습니다. 또는 here과 같이 TextTitle 또는 DateTitle을 고려하십시오.

+0

첫 번째 예제는 선을 따라 다소 있습니다. 그것은 x 축을 변화시키고 있습니다. 내가하려는 일은 매년 일년 중 첫 번째 항목 만 채우는 것입니다. 나머지 364 일에는 아무 것도 없습니다. x 축을 따라 올해의 변화를 표시 할 수만 있다면 설정할 수 있습니다. – Iakona

관련 문제