JFreeChart将一个点连接到所有其他点

时间:2015-03-24 02:31:17

标签: java charts jfreechart

是否可以在JFreeChart中将一个点连接到所有其他点
这里应该怎么样 enter image description here

所以围绕X点的所有点

chart.setBackgroundPaint(Color.white);

        final XYPlot plot = chart.getXYPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);

        Shape cross = ShapeUtilities.createDiagonalCross(3, 1);
        Shape somehing = ShapeUtilities.createDiamond(4);



        final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
        renderer.setSeriesLinesVisible(0, false);
        renderer.setSeriesLinesVisible(1, false);
        renderer.setSeriesLinesVisible(2, false);
        renderer.setSeriesLinesVisible(3, false);

        renderer.setSeriesShape(0, cross);
        renderer.setSeriesShape(1, somehing);
        renderer.setSeriesShape(2, somehing);
        renderer.setSeriesShape(3, somehing);

        renderer.setSeriesPaint(0, Color.RED);
        renderer.setSeriesPaint(1, Color.BLUE);
        renderer.setSeriesPaint(2, Color.YELLOW);
        renderer.setSeriesPaint(2, Color.green);
        plot.setRenderer(renderer);


        plot.setBackgroundPaint(Color.BLACK);
        // change the auto tick unit selection to integer units only...
        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        // OPTIONAL CUSTOMISATION COMPLETED.

        return chart;

谢谢你

1 个答案:

答案 0 :(得分:3)

您需要自定义渲染器。此最小示例会覆盖XYLineAndShapeRenderer方法drawPrimaryLine()。它绘制相对于具有anchor作为其系列索引的项的行。您需要概括现有的实现,替换下面显示的行。

附录:该示例只是将anchor作为构造函数参数传递,但您可以扩展XYDataset以包含每个系列的唯一值。

image

MyRenderer r = new MyRenderer(8);
XYPlot plot = new XYPlot(dataset, new NumberAxis("X"), new NumberAxis("Y"), r);
JFreeChart chart = new JFreeChart(plot);
…
private static class MyRenderer extends XYLineAndShapeRenderer {

    private final int anchor;

    public MyRenderer(int acnchor) {
        this.anchor = acnchor;
    }

    @Override
    protected void drawPrimaryLine(XYItemRendererState state, Graphics2D g2,
        XYPlot plot, XYDataset dataset, int pass, int series, int item,
        ValueAxis domainAxis, ValueAxis rangeAxis, Rectangle2D dataArea) {
        if (item == anchor) {
            return;
        }
        …
        double x0 = dataset.getXValue(series, anchor);
        double y0 = dataset.getYValue(series, anchor);
        …
    }
}