【问题标题】:Place a circle on top of an XYLineChart in JFreeChart在 JFreeChart 中的 XYLineChart 顶部放置一个圆圈
【发布时间】:2012-07-05 18:30:37
【问题描述】:

我已经使用 JFreeChart 绘制了标准正态分布:

NormalDistributionFunction2D normalDistributionFunction2D = new NormalDistributionFunction2D(0.5, 0.15);
XYDataset dataset = DatasetUtilities.sampleFunction2D(normalDistributionFunction2D, 0.0, 1.0, 1000, "Normal");
JFreeChart chart = ChartFactory.createXYLineChart("MyTitle --, "", "", xySeriesCollection, PlotOrientation.VERTICAL, false, false, false);

除此之外,我想在给定点放置一个圆圈。我计算圆的 [x,y] 坐标没有问题,但我不确定如何将它添加到图表中。任何帮助表示赞赏。下面是我想要实现的 MS Paint 组合。

【问题讨论】:

    标签: java jfreechart


    【解决方案1】:

    您绝对不需要覆盖绘制方法或在顶部添加图层。 JFreeChart 已经支持这种行为。

    正确的做法是给图表添加注解,具体是:

    chart.getPlot().addAnnotation(new XYShapeAnnotation(new Ellipse2D.Double(x - radius, y - radius, radius + radius, radius + radius))
    

    其中 x 和 y 是圆的中心。请注意,坐标在您的绘图空间中,而不是图形空间中。 JFreeChart 会在渲染时自动转换它们。

    看看: http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/annotations/XYShapeAnnotation.htm http://www.java2s.com/Code/Java/Chart/JFreeChartPlotOrientationDemo2.htm

    【讨论】:

    【解决方案2】:

    如果你有该点的坐标,你可以:

    1. 将图表添加到 JPanel 并在其 paintComponent 上绘制圆圈(有点困难,因为您必须补偿图表边框
    2. 在同一图表上绘制第二个系列,该系列仅包含一个点。请参阅此post 以定义自定义形状以呈现数据点 - 您可以定义要呈现为数据点的圆

    【讨论】:

    • 图表的paintComponent方法是由工厂创建的,因此无法扩展,如何访问它?
    • @HovercraftFullOfEels 是的,图表应该添加到 JPanel 中
    • 注释是为此设计的,但第二个系列是一个有用的替代方案;覆盖 paintComponent() 是个坏主意,因为它不能轻易访问渲染器的几何图形。
    【解决方案3】:

    一种方法是将具有 x 和 y 坐标的点添加到系列中,例如 (0,0)。现在,设置renderer.setSeriesShape(series,new Ellipse2D.Double(-3, -3, 6, 6)); 现在您可以更新系列并使点也可移动。

    【讨论】:

      猜你喜欢
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多