2012-07-27 3 views
1

나는 그 답이 어딘가에있을 것이라고 확신하지만 실제로 그것을 발견 할 수 없습니다.jFreeChart LineChart는 틱을 조정합니다.

많은 항목이있는 라인 차트가 있습니다 (예 : 1000). 플롯에서 저는 Y 축을 완벽하게 잘 볼 수 있습니다 (그리고 조정을 참조하십시오). 그냥 X 축은 나를 미치게합니다! 1000 개의 항목이있는 경우 플롯의 맨 아래 번호가 없습니다.

A : 이렇게하면 Y 축을 멋지게 조절할 수 있습니다. 마지막 NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setRange (0.00, 1.00); rangeAxis.setTickUnit (new NumberTickUnit (0.2)); rangeAxis.setVerticalTickLabels (false);

나는 X 축과 같은 것을하고 싶다.

도와주세요. 고마워요


-> 첫 번째 문제 | 도메인 100 개 번호 축과 당신이 JFreeChart가의 수정 된 코드가 두려워

Domain axis with 100 numbers and an interval of 50

+1

입니다 도움을 줄 수 있습니다. 필자는'LineChart'와'XYLineChart'를 모두 사용하여 시도해 보았습니다. 그리고 두 도메인 모두 'DomainAxis'에 번호를 표시했습니다. – GrahamA

+0

안녕하세요, 제가 한 가지 대답을 얻었습니다. 존은 내 문제를 정말로 이해했고 나는 그가 그것을 거의 해결했다고 생각한다. 남은 유일한 문제는, 내가 볼 수있는 것은 "..."어디에 100, 200 등이 있어야하는지입니다. – jackie

답변

2

(50)의 간격, 오픈 소스가 큰가요?

내 BarChart에 앞서이 문제가 있습니다. x 축에서 눈금을 사용자 정의하는 것입니다. 난 CategoryAxis.java만으로이 기능을 구현했습니다. 나는 이것이 당신에게 약간의 빛을 줄 수 있기를 바랍니다. 99 tickInterval을 설정하면

변수 "tickInterval"을 유의하시기 바랍니다, 나는 표시됩니다 ... 단지 0, 100, 200, 300, 1000 개 번호가 예를 들어 , 클래스에이 속성을 추가했다.

안녕 방법, 내 freechart 버전은 우리는 당신이 몇 가지 추가 정보 바람직 자체 포함 된 예제를 제공 할 수있는 경우 ([SSCCE] (http://sscce.org/)) 1.0.5

public List refreshTicks(Graphics2D g2, 
         AxisState state, 
         Rectangle2D dataArea, 
         RectangleEdge edge) { 

    List ticks = new java.util.ArrayList(); 

    // sanity check for data area... 
    if (dataArea.getHeight() <= 0.0 || dataArea.getWidth() < 0.0) { 
     return ticks; 
    } 

    CategoryPlot plot = (CategoryPlot) getPlot(); 
    List categories = plot.getCategoriesForAxis(this); 
    double max = 0.0; 

    if (categories != null) { 
     CategoryLabelPosition position 
       = this.categoryLabelPositions.getLabelPosition(edge); 
     float r = this.maximumCategoryLabelWidthRatio; 
     if (r <= 0.0) { 
      r = position.getWidthRatio(); 
     } 

     float l = 0.0f; 
     if (position.getWidthType() == CategoryLabelWidthType.CATEGORY) { 
      l = (float) calculateCategorySize(categories.size(), dataArea, 
        edge); 
     } 
     else { 
      if (RectangleEdge.isLeftOrRight(edge)) { 
       l = (float) dataArea.getWidth(); 
      } 
      else { 
       l = (float) dataArea.getHeight(); 
      } 
     } 
     int categoryIndex = 0; 
     Iterator iterator = categories.iterator(); 
     while (iterator.hasNext()) { 
      Comparable category = (Comparable) iterator.next(); 
      if(categoryIndex>0 && tickInterval>0) 
      { 
       if((categoryIndex+1) % (tickInterval+1) > 0) 
       { 
        category = ""; 
       } 
      } 

      TextBlock label = null; 
      if(tickInterval> 0) 
      { 
       label = this.createSingleLabel(category, l * r, edge, g2); 
      } 
      else 
      { 
       label = createLabel(category, l * r, edge, g2); 
      } 
      if (edge == RectangleEdge.TOP || edge == RectangleEdge.BOTTOM) { 
       max = Math.max(max, calculateTextBlockHeight(label, 
         position, g2)); 
      } 
      else if (edge == RectangleEdge.LEFT 
        || edge == RectangleEdge.RIGHT) { 
       max = Math.max(max, calculateTextBlockWidth(label, 
         position, g2)); 
      } 
      Tick tick = new CategoryTick(category, label, 
        position.getLabelAnchor(), position.getRotationAnchor(), 
        position.getAngle()); 
      ticks.add(tick); 
      categoryIndex = categoryIndex + 1; 
     } 
    } 
    state.setMax(max); 
    return ticks; 

} 
+0

안녕하세요, 귀하의 도움에 감사드립니다. 거의 작동하지만 뭔가가 여전히 꺼져있는 것 같습니다. 나는 간격을 얻지 만, 레이블은 실제 숫자가 아닌 3 개의 점으로 만 구성됩니다. 10/20/30처럼 ... 등. – jackie