JFreeChart画雷达图、带刻度雷达图、蜘蛛网、带刻度蜘蛛网(转自:http://blog.csdn.net/guoquanyou/archive/2008/12/10/3488313.aspx)

来源:互联网 发布:巨人网络征途 编辑:程序博客网 时间:2024/04/30 23:46

画雷达图

  1. /**
  2.  * @作者:Jcuckoo
  3.  * @日期:2008-12-9
  4.  * @版本:V 1.0
  5.  */
  6. public class MySpriderWebPlotTest {
  7.     public static void main(String args[]) {
  8.         JFrame jf = new JFrame();
  9.         jf.add(erstelleSpinnenDiagramm());
  10.         jf.pack();
  11.         jf.setVisible(true);
  12.     }
  13.     public static JPanel erstelleSpinnenDiagramm() {
  14.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  15.         String group1 = "apple ";
  16.         
  17.         dataset.addValue(5, group1, "w1");
  18.         dataset.addValue(6, group1, "w2");
  19.         dataset.addValue(4, group1, "w3");
  20.         dataset.addValue(2, group1, "w4");
  21.         dataset.addValue(5, group1, "w5");
  22.         dataset.addValue(5, group1, "w6");
  23.         dataset.addValue(5, group1, "w7");
  24.         dataset.addValue(8, group1, "w8");
  25.     
  26.         SpiderWebPlot spiderwebplot = new SpiderWebPlot(dataset);
  27.         
  28.         JFreeChart jfreechart = new JFreeChart("Test", TextTitle.DEFAULT_FONT,spiderwebplot, false);
  29.         LegendTitle legendtitle = new LegendTitle(spiderwebplot);
  30.         legendtitle.setPosition(RectangleEdge.BOTTOM);
  31.         jfreechart.addSubtitle(legendtitle);
  32.         
  33.         ChartPanel chartpanel = new ChartPanel(jfreechart);
  34.         return chartpanel;
  35.     }
  36. }
蜘蛛网


  1. public class MySpriderWebPlotTest {
  2.     public static void main(String args[]) {
  3.         JFrame jf = new JFrame();
  4.         jf.add(erstelleSpinnenDiagramm());
  5.         jf.pack();
  6.         jf.setVisible(true);
  7.     }
  8.     public static JPanel erstelleSpinnenDiagramm() {
  9.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  10.         String group1 = "apple ";
  11.         
  12.         dataset.addValue(5, group1, "w1");
  13.         dataset.addValue(6, group1, "w2");
  14.         dataset.addValue(4, group1, "w3");
  15.         dataset.addValue(2, group1, "w4");
  16.         dataset.addValue(5, group1, "w5");
  17.         dataset.addValue(5, group1, "w6");
  18.         dataset.addValue(5, group1, "w7");
  19.         dataset.addValue(8, group1, "w8");
  20.         String group2 = "orange ";
  21.         dataset.addValue(3, group2, "w1");
  22.         dataset.addValue(3, group2, "w2");
  23.         dataset.addValue(4, group2, "w3");
  24.         dataset.addValue(7, group2, "w4");
  25.         dataset.addValue(4, group2, "w5");
  26.         dataset.addValue(5, group2, "w6");
  27.         dataset.addValue(3, group2, "w7");
  28.         dataset.addValue(3, group2, "w8");
  29.         String group3 = "banana ";
  30.         dataset.addValue(4, group3, "w1");
  31.         dataset.addValue(5, group3, "w2");
  32.         dataset.addValue(2, group3, "w3");
  33.         dataset.addValue(5, group3, "w4");
  34.         dataset.addValue(6, group3, "w5");
  35.         dataset.addValue(6, group3, "w6");
  36.         dataset.addValue(4, group3, "w7");
  37.         dataset.addValue(4, group3, "w8");
  38.         SpiderWebPlot spiderwebplot = new SpiderWebPlot(dataset);
  39.         JFreeChart jfreechart = new JFreeChart("Test", TextTitle.DEFAULT_FONT,spiderwebplot, false);
  40.         LegendTitle legendtitle = new LegendTitle(spiderwebplot);
  41.         legendtitle.setPosition(RectangleEdge.BOTTOM);
  42.         jfreechart.addSubtitle(legendtitle);
  43.         
  44.         ChartPanel chartpanel = new ChartPanel(jfreechart);
  45.         return chartpanel;
  46.     }
  47. }
带刻度问题比较复杂,JFreeChart本身没有提供其功能,需要继承SpiderWebPlot,覆盖drawLabel方法。
此处代码参考Jerry代码,友情感谢。
MySpriderWebPlotTest出自“
王杰瑞的技术博客” 博客,请务必保留此出处http://wangjierui.blog.51cto.com/186879/116845
  1. /**
  2.  * @本文出自 “王杰瑞的技术博客” 博客,请务必保留此出处 http://wangjierui.blog.51cto.com/186879/116845
  3.  */
  4. public class MySpiderWebPlot extends SpiderWebPlot { 
  5.     private int ticks = DEFAULT_TICKS; 
  6.     private static final int DEFAULT_TICKS = 5
  7.     private NumberFormat format = NumberFormat.getInstance(); 
  8.     private static final double PERPENDICULAR = 90
  9.     private static final double TICK_SCALE = 0.015
  10.     private int valueLabelGap = DEFAULT_GAP; 
  11.     private static final int DEFAULT_GAP = 10
  12.     private static final double THRESHOLD = 15
  13.    
  14.     
  15.   
  16.     MySpiderWebPlot(CategoryDataset createCategoryDataset) { 
  17.             super(createCategoryDataset); 
  18.     } 
  19.     @Override 
  20.     protected void drawLabel(final Graphics2D g2, final Rectangle2D plotArea, final double value, 
  21.                     final int cat, final double startAngle, final double extent) { 
  22.             super.drawLabel(g2, plotArea, value, cat, startAngle, extent); 
  23.             final FontRenderContext frc = g2.getFontRenderContext(); 
  24.             final double[] transformed = new double[2]; 
  25.             final double[] transformer = new double[2]; 
  26.             final Arc2D arc1 = new Arc2D.Double(plotArea, startAngle, 0, Arc2D.OPEN); 
  27.             for (int i = 1; i <= ticks; i++) { 
  28.                     final Point2D point1 = arc1.getEndPoint(); 
  29.                     final double deltaX = plotArea.getCenterX(); 
  30.                     final double deltaY = plotArea.getCenterY(); 
  31.                     double labelX = point1.getX() - deltaX; 
  32.                     double labelY = point1.getY() - deltaY; 
  33.                     final double scale = ((double) i / (double) ticks); 
  34.                     final AffineTransform tx = AffineTransform.getScaleInstance(scale, scale); 
  35.                     final AffineTransform pointTrans = AffineTransform.getScaleInstance(scale + TICK_SCALE, scale + TICK_SCALE); 
  36.                     transformer[0] = labelX; 
  37.                     transformer[1] = labelY; 
  38.                     pointTrans.transform(transformer, 0, transformed, 01); 
  39.                     final double pointX = transformed[0] + deltaX; 
  40.                     final double pointY = transformed[1] + deltaY; 
  41.                     tx.transform(transformer, 0, transformed, 01); 
  42.                     labelX = transformed[0] + deltaX; 
  43.                     labelY = transformed[1] + deltaY; 
  44.                     double rotated = (PERPENDICULAR); 
  45.                     AffineTransform rotateTrans = AffineTransform.getRotateInstance(Math.toRadians(rotated), labelX, labelY); 
  46.                     transformer[0] = pointX; 
  47.                     transformer[1] = pointY; 
  48.                     rotateTrans.transform(transformer, 0, transformed, 01); 
  49.                     final double x1 = transformed[0]; 
  50.                     final double y1 = transformed[1]; 
  51.                     rotated = (-PERPENDICULAR); 
  52.                     rotateTrans = AffineTransform.getRotateInstance(Math.toRadians(rotated), labelX, labelY); 
  53.                     rotateTrans.transform(transformer, 0, transformed, 01); 
  54.                     final Composite saveComposite = g2.getComposite(); 
  55.                     g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f)); 
  56.                     g2.draw(new Line2D.Double(transformed[0], transformed[1], x1, y1)); 
  57.                     if (startAngle == this.getStartAngle()) { 
  58.                             final String label = format.format(((double) i / (double) ticks) * this.getMaxValue()); 
  59.                             final Rectangle2D labelBounds = getLabelFont().getStringBounds(label, frc); 
  60.                             final LineMetrics lm = getLabelFont().getLineMetrics(label, frc); 
  61.                             final double ascent = lm.getAscent(); 
  62.                             if (Math.abs(labelX - plotArea.getCenterX()) < THRESHOLD) { 
  63.                                     labelX += valueLabelGap; 
  64.                                     labelY += ascent / (float2
  65.                             } else if (Math.abs(labelY - plotArea.getCenterY()) < THRESHOLD) { 
  66.                                     labelY += valueLabelGap; 
  67.                             } else if (labelX >= plotArea.getCenterX()) { 
  68.                                     if (labelY < plotArea.getCenterY()) { 
  69.                                             labelX += valueLabelGap; 
  70.                                             labelY += valueLabelGap; 
  71.                                     } else { 
  72.                                             labelX -= valueLabelGap; 
  73.                                             labelY += valueLabelGap; 
  74.                                     } 
  75.                             } else { 
  76.                                     if (labelY > plotArea.getCenterY()) { 
  77.                                             labelX -= valueLabelGap; 
  78.                                             labelY -= valueLabelGap; 
  79.                                     } else { 
  80.                                             labelX += valueLabelGap; 
  81.                                             labelY -= valueLabelGap; 
  82.                                     } 
  83.                             } 
  84.                             g2.setPaint(getLabelPaint()); 
  85.                             g2.setFont(getLabelFont()); 
  86.                             g2.drawString(label, (float) labelX, (float) labelY); 
  87.                     } 
  88.                     g2.setComposite(saveComposite); 
  89.             } 
  90.     } 
  91. }
带刻度雷达图


  1. /**
  2.  * @作者:Jcuckoo
  3.  * @日期:2008-12-9
  4.  * @版本:V 1.0
  5.  */
  6. public class MySpriderWebPlotTest {
  7.     public static void main(String args[]) {
  8.         JFrame jf = new JFrame();
  9.         jf.add(erstelleSpinnenDiagramm());
  10.         jf.pack();
  11.         jf.setVisible(true);
  12.     }
  13.     public static JPanel erstelleSpinnenDiagramm() {
  14.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  15.         String group1 = "apple ";
  16.         
  17.         dataset.addValue(5, group1, "w1");
  18.         dataset.addValue(6, group1, "w2");
  19.         dataset.addValue(4, group1, "w3");
  20.         dataset.addValue(2, group1, "w4");
  21.         dataset.addValue(5, group1, "w5");
  22.         dataset.addValue(5, group1, "w6");
  23.         dataset.addValue(5, group1, "w7");
  24.         dataset.addValue(8, group1, "w8");
  25.         MySpiderWebPlot spiderwebplot = new MySpiderWebPlot(dataset);
  26.         JFreeChart jfreechart = new JFreeChart("Test", TextTitle.DEFAULT_FONT,spiderwebplot, false);
  27.         LegendTitle legendtitle = new LegendTitle(spiderwebplot);
  28.         legendtitle.setPosition(RectangleEdge.BOTTOM);
  29.         jfreechart.addSubtitle(legendtitle);
  30.         
  31.         ChartPanel chartpanel = new ChartPanel(jfreechart);
  32.         return chartpanel;
  33.     }
  34. }
带刻度蜘蛛网

  1. /**
  2.  * @作者:Jcuckoo
  3.  * @日期:2008-12-9
  4.  * @版本:V 1.0
  5.  */
  6. public class MySpriderWebPlotTest {
  7.     public static void main(String args[]) {
  8.         JFrame jf = new JFrame();
  9.         jf.add(erstelleSpinnenDiagramm());
  10.         jf.pack();
  11.         jf.setVisible(true);
  12.     }
  13.     public static JPanel erstelleSpinnenDiagramm() {
  14.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  15.         String group1 = "apple ";
  16.         
  17.         dataset.addValue(5, group1, "w1");
  18.         dataset.addValue(6, group1, "w2");
  19.         dataset.addValue(4, group1, "w3");
  20.         dataset.addValue(2, group1, "w4");
  21.         dataset.addValue(5, group1, "w5");
  22.         dataset.addValue(5, group1, "w6");
  23.         dataset.addValue(5, group1, "w7");
  24.         dataset.addValue(8, group1, "w8");
  25.         String group2 = "orange ";
  26.         dataset.addValue(3, group2, "w1");
  27.         dataset.addValue(3, group2, "w2");
  28.         dataset.addValue(4, group2, "w3");
  29.         dataset.addValue(7, group2, "w4");
  30.         dataset.addValue(4, group2, "w5");
  31.         dataset.addValue(5, group2, "w6");
  32.         dataset.addValue(3, group2, "w7");
  33.         dataset.addValue(3, group2, "w8");
  34.         String group3 = "banana ";
  35.         dataset.addValue(4, group3, "w1");
  36.         dataset.addValue(5, group3, "w2");
  37.         dataset.addValue(2, group3, "w3");
  38.         dataset.addValue(5, group3, "w4");
  39.         dataset.addValue(6, group3, "w5");
  40.         dataset.addValue(6, group3, "w6");
  41.         dataset.addValue(4, group3, "w7");
  42.         dataset.addValue(4, group3, "w8");
  43.         MySpiderWebPlot spiderwebplot = new MySpiderWebPlot(dataset);
  44.         JFreeChart jfreechart = new JFreeChart("Test", TextTitle.DEFAULT_FONT,spiderwebplot, false);
  45.         LegendTitle legendtitle = new LegendTitle(spiderwebplot);
  46.         legendtitle.setPosition(RectangleEdge.BOTTOM);
  47.         jfreechart.addSubtitle(legendtitle);
  48.         
  49.         ChartPanel chartpanel = new ChartPanel(jfreechart);
  50.         return chartpanel;
  51.     }
  52. }

原创粉丝点击