2010-02-23 70 views
1

我正在使用JRuby訪問JFreeChart。但我似乎無法在日期軸上設置域標記...任何人都可以告訴我爲什麼這不起作用?JFreeChart + JRuby - 域軸上兩點之間的填充區域

def create_plot 
    rangeaxis = NumberAxis.new 
    rangeaxis.setAutoRangeIncludesZero(true) 

    daxis = DateAxis.new 
    daxis.setRange(Time.at(@dataset['date_start'].to_i) , Time.at(@dataset['date_end'].to_i)) 

    @plot = XYPlot.new(@datasets.first, daxis, rangeaxis, @base_renderer) 
    @plot.setDatasetRenderingOrder(DatasetRenderingOrder::FORWARD) 
    @plot.setBackgroundPaint(java.awt.Color.white) 

    lol = IntervalMarker.new(0, 99999999999, java.awt.Color.gray, BasicStroke.new(2.0), java.awt.Color.gray, nil, 1.0) 
    lol.setLabel("ARGH") 
    @plot.addDomainMarker(lol) 
    end 

儘管標記應該覆蓋1970年1月至11月5138年的灰色區域,但並未顯示。如果我用addRangeMarker替換了這個調用,它可以工作,但我希望它在另一個軸上。

感謝您的回覆!

回答

1

我發現了一個更好的例子。我給的第一個是「CategoryMarker」,當你想要的是一個更通用的標記。本例中的域是時間,所以代碼設置標記的時間間隔以覆蓋範圍,然後設置要顯示的標籤參數。這來自示例MarkerDemo2,其使用createXYLineChart。這應該是相關的代碼:


     Marker threshold = new ValueMarker(80.0); 
     Hour hour1 = new Hour(18, 30, 6, 2005); 
     Hour hour2 = new Hour(20, 30, 6, 2005); 
     double millis1 = hour1.getFirstMillisecond(); 
     double millis2 = hour2.getFirstMillisecond(); 
     Marker cooling = new IntervalMarker(millis1, millis2); 
     cooling.setLabelOffsetType(LengthAdjustmentType.EXPAND); 
     cooling.setPaint(new Color(150, 150, 255)); 
     cooling.setLabel("Automatic Cooling"); 
     cooling.setLabelFont(new Font("SansSerif", Font.PLAIN, 11)); 
     cooling.setLabelPaint(Color.blue); 
     cooling.setLabelAnchor(RectangleAnchor.TOP_LEFT); 
     cooling.setLabelTextAnchor(TextAnchor.TOP_RIGHT); 
     plot.addDomainMarker(cooling, Layer.BACKGROUND); 
所以關鍵的是設置 IntervalMarker,然後附加使用 addDomainMarker。你絕對想要一個 RectangleAnchor

1

演示包中的BarChartDemo3顯示如何繪製特定域值的背景。您可以使用矩形爲該值着色整個寬度。如果你爲相鄰的值做這些,你應該得到你想要的效果。以下是一些關鍵的方法(我假設你可以看一下詳細信息的文檔。)


     CategoryMarker marker = new CategoryMarker("Category 3"); 
     marker.setPaint(new Color(0xDD, 0xFF, 0xDD, 0x80)); 
     marker.setAlpha(0.5f); 
     plot.addDomainMarker(marker, Layer.BACKGROUND); 

的文檔支付額外費用是值得的,這在我看來。

新增: 這就是上面的代碼之前。它似乎是定位標記。

 renderer.setItemLabelsVisible(true); 
     ItemLabelPosition p = new ItemLabelPosition(
      ItemLabelAnchor.CENTER, TextAnchor.CENTER, TextAnchor.CENTER, 45.0 
     ); 
     renderer.setPositiveItemLabelPosition(p); 
     plot.setRenderer(renderer); 
,然後有這個代碼,只是調用 addDomainMarker之前出現:

 marker.setLabelAnchor(RectangleAnchor.TOP_LEFT); 
     marker.setLabelTextAnchor(TextAnchor.TOP_LEFT); 
     marker.setLabelOffsetType(LengthAdjustmentType.CONTRACT); 
+1

我不明白 - 你如何將這個標記與域值相關聯? – 2010-02-24 12:04:50

+0

仍然沒有暗示將這個標記與一系列值相關聯,這是我打算做的: – 2010-02-25 11:32:45