2012-05-25 63 views
3

我使用jfreechart來顯示線圖。現在,在X軸上它顯示了圖表上每個(x,y)對的值。結果X軸有巨大的數量的價值重疊。我想顯示幾個值,例如每5個單位或類似的東西之後。如何使用Jfreechart這是可能的。JFreechart:在特定單元后顯示X軸的值

+0

請修改您的問題以包含展示問題並顯示您嘗試過的[sscce](http://sscce.org/)。 – trashgod

回答

3

繪製圖表的plot的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);