2012-07-05 98 views
1
的XYLineChart頂部的圓

我畫使用JFreeChart的標準正態分佈:廣場上的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); 

Standard normal distribution

在此之上,我想向一個圓圈在給定點。我在計算圓的[x,y]座標時沒有問題,但我不確定如何將它添加到圖表中。任何幫助讚賞。下面是一個我想要實現的MS Paint knockup。

enter image description here

回答

6

您絕對不需要重寫paint方法或在頂部添加圖層。 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做的

+0

嗯看起來不錯,我不知道這一點。+ 1 – GETah 2012-07-05 19:05:25

+0

++ - 感謝這一點,完美的作品。 – Ina 2012-07-05 19:42:41

+0

參見相關示例[此處](http://stackoverflow.com/a/8056418/230513)和[這裏](http://stackoverflow.com/a/6620017/230513)。 – trashgod 2012-07-06 01:18:43

1

如果該點的座標,您可以:

  1. 圖表添加到一個JPanel和畫圓其paintComponent(有點困難,因爲你必須補償圖邊框
  2. 在僅包含一個點的同一圖表上繪製第二個系列,請參閱此post以定義用於呈現數據點的自定義形狀 - 您可以定義要作爲數據點呈現的圓形
+0

如何訪問圖表的paintComponent方法,因爲它是由工廠創建的,因此無法擴展? – 2012-07-05 18:59:03

+0

@HovercraftFullOfEels真的,圖表應該被添加到JPanel – GETah 2012-07-05 19:03:03

+0

註解是爲此設計的,但第二個系列是一個有用的替代方案;重寫'paintComponent()'是一個好主意,因爲它可以輕鬆訪問渲染器的幾何體。 – trashgod 2012-07-06 01:21:14

0

的一種方法是增加一個點用x和y座標表示( 0,0)一系列。現在,設置renderer.setSeriesShape(series,new Ellipse2D.Double(-3, -3, 6, 6));現在您可以更新系列並使點可移動。