1

JRubyを使ってJFreeChartにアクセスしています。しかし、日付軸にドメインマーカーを設定できないようです...なぜこれが機能しないのか誰かに教えてもらえますか?

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月から5138年11月まで灰色の領域で覆われているはずですが、表示されていません。呼び出しをaddRangeMarkerに置き換えると、機能しますが、もう一方の軸に配置する必要があります。

返信ありがとうございます!

4

2 に答える 2

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);
于 2010-02-23T18:25:12.060 に答える
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

于 2010-02-25T19:21:15.293 に答える