6

現在、PolarChartはすべての座標を線で結合してポリゴンを作成しています。各ポイントをドットでプロットし、それらを結合しないようにしたいだけです。これは可能ですか?

Graphics2Dを使用してtranslateValueThetaRadiusToJava2D()円を描いてみましたが、非常に不格好で不自然です。

どんな提案も歓迎します!

4

4 に答える 4

6

したがって、DefaultPolarItemRendererはすべての極点を取り込み、極点を通常のJava2D座標に変換し、Polygonそれらの点でを作成してから描画します。ポリゴンの代わりにドットを描画する方法は次のとおりです。

public class MyDefaultPolarItemRenderer extends DefaultPolarItemRenderer {

    @Override
    public void drawSeries(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D dataArea, PlotRenderingInfo info, PolarPlot plot, XYDataset dataset, int seriesIndex) {


        int numPoints = dataset.getItemCount(seriesIndex);
        for (int i = 0; i < numPoints; i++) {

            double theta = dataset.getXValue(seriesIndex, i);
            double radius = dataset.getYValue(seriesIndex, i);
            Point p = plot.translateValueThetaRadiusToJava2D(theta, radius,
                    dataArea);
            Ellipse2D el = new Ellipse2D.Double(p.x, p.y, 5, 5);
            g2.fill(el);
            g2.draw(el);
        }
    }
}

次に、このクラスを他の場所でインスタンス化しました。

    MyDefaultPolarItemRenderer dpir = new MyDefaultPolarItemRenderer();
    dpir.setPlot(plot);
    plot.setRenderer(dpir);
于 2010-03-17T18:12:11.523 に答える
2

これは少し難しいです。を指定するとPolarPlot、そのを取得しAbstractRendererて形状を設定できます。例えば、

PolarPlot plot = (PolarPlot) chart.getPlot();
AbstractRenderer ar = (AbstractRenderer) plot.getRenderer();
ar.setSeriesShape(0, ShapeUtilities.createDiamond(5), true);

ひし形は凡例に表示されますが、DefaultPolarItemRenderer図形をレンダリングしたり、線を制御したりすることはできません。デフォルトのレンダラーを拡張してオーバーライドする必要がありますdrawSeries()XYLineAndShapeRenderer研究の良い例です。でどのように使用されているかを確認できますTimeSeriesChartDemo1

これがあなたにとってテラ・インコグニタであるなら、私はJFreeChart開発者ガイド†</sup>をお勧めします。

†</sup>免責事項:ObjectRefineryLimitedとは提携していません。私は満足している顧客であり、ごくわずかな貢献者です。

于 2010-03-12T20:43:01.603 に答える
1

これは、ユーザーがシリーズに割り当てた色を関数が取得する場合に備えて、優れたディスカッションです。

追加 ...

Color c =(Color)this.lookupSeriesPaint(seriesIndex);
g2.setColor(c);

前 ...

g.draw(e1);

他の関数があります...コード補完を使用して、名前がlookupSeries........(int seriesindex)

于 2011-05-05T10:23:38.997 に答える
1

線を結ばずにポイントを取得する奇妙な方法を見つけました。

レンダラーストロークを、ダッシュフェーズが0、長さが1e10の細い線に設定しました。

Stroke dashedStroke = new BasicStroke(
                          0.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                          0.0f, new float[] {0.0f, 1e10f}, 1.0f );
renderer.setSeriesStroke(0, dashedStroke);
于 2017-06-27T11:47:01.130 に答える