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

是否可以在JFreeChart中将一个点连接到所有其他点
它应该如何看起来 在此处输入图像描述

所以所有的点都连接到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; 

谢谢

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

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

图片

 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); … } }