我在JFreeChart的散点图上有几千个点.
现在的问题是我的程序是用“正方形”绘制点,但是我需要一些帮助,如何将点的形状从“正方形”更改为“点/圆”.
任何帮助将不胜感激. @H_301_4@// *我正在使用ShapeUtilities,但是当我使用XYItemRenderer / XYDotRenderer时,它不会改变指向“DaigonalCross”的形状 – 如果在代码中出现任何错误,请进行任何更正.. * ///
现在的问题是我的程序是用“正方形”绘制点,但是我需要一些帮助,如何将点的形状从“正方形”更改为“点/圆”.
任何帮助将不胜感激. @H_301_4@// *我正在使用ShapeUtilities,但是当我使用XYItemRenderer / XYDotRenderer时,它不会改变指向“DaigonalCross”的形状 – 如果在代码中出现任何错误,请进行任何更正.. * ///
import java.awt.Color; import java.awt.Dimension; import java.awt.Shape; import java.util.*; import javax.swing.JPanel; import org.jfree.chart.*; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYDotRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; import org.jfree.util.ShapeUtilities; public class SPlotfinal extends ApplicationFrame { public SPlotfinal(String s) { super(s); JPanel jpanel = createDemoPanel(); jpanel.setPreferredSize(new Dimension(500,270)); setContentPane(jpanel); } public static JPanel createDemoPanel() { JFreeChart jfreechart = ChartFactory.createScatterPlot("Scatter Plot Demo","X","Y",samplexydataset2(),PlotOrientation.VERTICAL,true,false); Shape cross = ShapeUtilities.createDiagonalCross(3,1); XYPlot xyPlot = (XYPlot) jfreechart.getPlot(); XYItemRenderer renderer = xyPlot.getRenderer(); renderer.setBaseShape(cross); renderer.setBasePaint(Color.red); //changing the Renderer to XYDotRenderer //xyPlot.setRenderer(new XYDotRenderer()); XYDotRenderer xydotrenderer = new XYDotRenderer(); xyPlot.setRenderer(xydotrenderer); xydotrenderer.setSeriesShape(0,cross); xyPlot.setDomainCrosshairVisible(true); xyPlot.setRangeCrosshairVisible(true); return new ChartPanel(jfreechart); } private static XYDataset samplexydataset2() { int cols = 20; int rows = 20; double[][] values = new double[cols][rows]; XYSeriesCollection xySeriesCollection = new XYSeriesCollection(); XYSeries series = new XYSeries("Random"); Random rand = new Random(); for (int i = 0; i < values.length; i++) { for (int j = 0; j < values[i].length; j++) { double x = Math.round(rand.nextDouble() * 500); double y = Math.round(rand.nextDouble() * 500); series.add(x,y); } } xySeriesCollection.addSeries(series); return xySeriesCollection; } public static void main(String args[]) { SPlotfinal scatterplotdemo4 = new SPlotfinal("Scatter Plot Demo 4"); scatterplotdemo4.pack(); RefineryUtilities.centerFrameOnScreen(scatterplotdemo4); scatterplotdemo4.setVisible(true); } }
解决方法
ScatterRenderer
从0700继承
getItemShape()
.您可以覆盖
getItemShape()
以提供您自己的形状.
@H_301_4@附录:这种方法的一个优点是您可以为每个系列中的每个项目指定一个Shape.
@H_301_4@附录:要使用ShapeUtilities.createDiagonalCross(),请执行以下操作:
Shape cross = ShapeUtilities.createDiagonalCross(3,1); plot = (XYPlot) chart.getPlot(); renderer = plot.getRenderer(); renderer.setSeriesShape(0,cross);@H_301_4@附录:只需切换到setSeriesShape().另外,跳过XYDotRenderer和Math.round().
import java.awt.Color; import java.awt.Dimension; import java.awt.Shape; import java.util.*; import javax.swing.JPanel; import org.jfree.chart.*; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; import org.jfree.util.ShapeUtilities; public class SPlotfinal extends ApplicationFrame { public SPlotfinal(String s) { super(s); JPanel jpanel = createDemoPanel(); jpanel.setPreferredSize(new Dimension(640,480)); add(jpanel); } public static JPanel createDemoPanel() { JFreeChart jfreechart = ChartFactory.createScatterPlot( "Scatter Plot Demo",1); XYPlot xyPlot = (XYPlot) jfreechart.getPlot(); xyPlot.setDomainCrosshairVisible(true); xyPlot.setRangeCrosshairVisible(true); XYItemRenderer renderer = xyPlot.getRenderer(); renderer.setSeriesShape(0,cross); renderer.setSeriesPaint(0,Color.red); return new ChartPanel(jfreechart); } private static XYDataset samplexydataset2() { int cols = 20; int rows = 20; double[][] values = new double[cols][rows]; XYSeriesCollection xySeriesCollection = new XYSeriesCollection(); XYSeries series = new XYSeries("Random"); Random rand = new Random(); for (int i = 0; i < values.length; i++) { for (int j = 0; j < values[i].length; j++) { double x = rand.nextGaussian(); double y = rand.nextGaussian(); series.add(x,y); } } xySeriesCollection.addSeries(series); return xySeriesCollection; } public static void main(String args[]) { SPlotfinal scatterplotdemo4 = new SPlotfinal("Scatter Plot Demo 4"); scatterplotdemo4.pack(); RefineryUtilities.centerFrameOnScreen(scatterplotdemo4); scatterplotdemo4.setVisible(true); } }