2012-05-25 3 views
3

Я использую jfreechart для отображения линейного графика. Теперь на оси X отображается значение для каждой пары (x, y) на диаграмме. В результате ось X имеет огромную сумму значений, перекрывающихся. Я хочу отобразить несколько значений, например, каждые 5 единиц или что-то в этом роде. Как это возможно, используя Jfreechart.JFreechart: Отображение оси X со значениями после определенных единиц

+0

Измените свой вопрос, включив в него [sscce] (http://sscce.org/), который показывает проблему и показывает, что вы пробовали. – trashgod

ответ

3

Перед тем, как нарисован график NumberAxis графика, его отметки обновляются. Результатом является List, который включает в себя объект NumberTick для каждой отметки оси.

При переопределении функции NumberAxis.refreshTicks вы можете контролировать, как и будут отображаться метки.

Например, в следующем коде я получаю все отметки и повторяю их поиск TickType.MAJOR. Если значение основной отметки не делится на 5, оно заменяется незначительной отметкой.

В результате будут отображаться только значения, делящиеся на 5, с их текстовой меткой.

XYPlot plot = (XYPlot) chart.getPlot(); 

NumberAxis myAxis = new NumberAxis(plot.getDomainAxis().getLabel()) { 
    @Override 
    public List refreshTicks(Graphics2D g2, AxisState state, 
          Rectangle2D dataArea, RectangleEdge edge) { 

    List allTicks = super.refreshTicks(g2, state, dataArea, edge); 
    List myTicks = new ArrayList(); 

    for (Object tick : allTicks) { 
     NumberTick numberTick = (NumberTick) tick; 

     if (TickType.MAJOR.equals(numberTick.getTickType()) && 
        (numberTick.getValue() % 5 != 0)) { 
     myTicks.add(new NumberTick(TickType.MINOR, numberTick.getValue(), "", 
        numberTick.getTextAnchor(), numberTick.getRotationAnchor(), 
        numberTick.getAngle())); 
     continue; 
     } 
     myTicks.add(tick); 
    } 
    return myTicks; 
    } 
}; 

plot.setDomainAxis(myAxis); 
Смежные вопросы