看了 jfreechart 雷达图 的demo  那个角度的分割以及标注都是封装了的,我要是想自定义分割数以及各个方向的标注,该怎么办呢?

解决方案 »

  1.   


     public class MySpiderWebPlot extends SpiderWebPlot {     private int ticks = DEFAULT_TICKS;   private static final int DEFAULT_TICKS = 5;   private NumberFormat format = NumberFormat.getInstance();   private static final double PERPENDICULAR = 90;   private static final double TICK_SCALE = 0.015;   private int valueLabelGap = DEFAULT_GAP;   private static final int DEFAULT_GAP = 20;   private static final double THRESHOLD = 15;     MySpiderWebPlot(CategoryDataset createCategoryDataset) {   super(createCategoryDataset);   }     @Override   protected void drawLabel(final Graphics2D g2, final Rectangle2D plotArea,   final double value, final int cat, final double startAngle,   final double extent) {   super.drawLabel(g2, plotArea, value, cat, startAngle, extent);   final FontRenderContext frc = g2.getFontRenderContext();   final double[] transformed = new double[2];   final double[] transformer = new double[2];   final Arc2D arc1 = new Arc2D.Double(plotArea, startAngle, 0, Arc2D.OPEN);   for (int i = 1; i  <= ticks; i++) {   final Point2D point1 = arc1.getEndPoint();   final double deltaX = plotArea.getCenterX();   final double deltaY = plotArea.getCenterY();   double labelX = point1.getX() - deltaX;   double labelY = point1.getY() - deltaY;   final double scale = ((double) i / (double) ticks);   final AffineTransform tx = AffineTransform.getScaleInstance(scale,   scale);   final AffineTransform pointTrans = AffineTransform   .getScaleInstance(scale + TICK_SCALE, scale + TICK_SCALE);   transformer[0] = labelX;   transformer[1] = labelY;   pointTrans.transform(transformer, 0, transformed, 0, 1);   final double pointX = transformed[0] + deltaX;   final double pointY = transformed[1] + deltaY;   tx.transform(transformer, 0, transformed, 0, 1);   labelX = transformed[0] + deltaX;   labelY = transformed[1] + deltaY;   double rotated = (PERPENDICULAR);   AffineTransform rotateTrans = AffineTransform.getRotateInstance(   Math.toRadians(rotated), labelX, labelY);   transformer[0] = pointX;   transformer[1] = pointY;   rotateTrans.transform(transformer, 0, transformed, 0, 1);   final double x1 = transformed[0];   final double y1 = transformed[1];   rotated = (-PERPENDICULAR);   rotateTrans = AffineTransform.getRotateInstance(   Math.toRadians(rotated), labelX, labelY);   rotateTrans.transform(transformer, 0, transformed, 0, 1);   final Composite saveComposite = g2.getComposite();   g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,   1.0f));   g2.draw(new Line2D.Double(transformed[0], transformed[1], x1, y1));   if (startAngle == this.getStartAngle()) {   final String label = format   .format(((double) i / (double) ticks)   * this.getMaxValue());   final Rectangle2D labelBounds = getLabelFont().getStringBounds(   label, frc);   final LineMetrics lm = getLabelFont()   .getLineMetrics(label, frc);   final double ascent = lm.getAscent();   if (Math.abs(labelX - plotArea.getCenterX())  < THRESHOLD) {   labelX += valueLabelGap;   labelY += ascent / (float) 2;   } else if (Math.abs(labelY - plotArea.getCenterY())  < THRESHOLD) {   labelY += valueLabelGap;   } else if (labelX >= plotArea.getCenterX()) {   if (labelY  < plotArea.getCenterY()) {   labelX += valueLabelGap;   labelY += valueLabelGap;   } else {   labelX -= valueLabelGap;   labelY += valueLabelGap;   }   } else {   if (labelY > plotArea.getCenterY()) {   labelX -= valueLabelGap;   labelY -= valueLabelGap;   } else {   labelX += valueLabelGap;   labelY -= valueLabelGap;   }   }   g2.setPaint(getLabelPaint());   g2.setFont(getLabelFont());   g2.drawString(label, (float) labelX, (float) labelY);   }   g2.setComposite(saveComposite);   }   }  } 
      

  2.   

    JFreeChart的蜘蛛网图(又称雷达图,网状图)
    下面是个雷达图,包加载正确就能看到效果import java.awt.Dimension;
    import javax.swing.JPanel;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
    import org.jfree.chart.plot.SpiderWebPlot;
    import org.jfree.chart.title.LegendTitle;
    import org.jfree.chart.title.TextTitle;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.ui.*;public class SpiderWebChartDemo1 extends ApplicationFrame
    { public SpiderWebChartDemo1(String s)
     {
      super(s);
      JPanel jpanel = createDemoPanel();
      jpanel.setPreferredSize(new Dimension(500, 270));
      setContentPane(jpanel);
     } private static CategoryDataset createDataset()
     {
      String s = "First";
      String s1 = "Second";
      String s2 = "Third";
      String s3 = "Category 1";
      String s4 = "Category 2";
      String s5 = "Category 3";
      String s6 = "Category 4";
      String s7 = "Category 5";
      DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
      defaultcategorydataset.addValue(1.0D, s, s3);
      defaultcategorydataset.addValue(4D, s, s4);
      defaultcategorydataset.addValue(3D, s, s5);
      defaultcategorydataset.addValue(5D, s, s6);
      defaultcategorydataset.addValue(5D, s, s7);
      defaultcategorydataset.addValue(5D, s1, s3);
      defaultcategorydataset.addValue(7D, s1, s4);
      defaultcategorydataset.addValue(6D, s1, s5);
      defaultcategorydataset.addValue(8D, s1, s6);
      defaultcategorydataset.addValue(4D, s1, s7);
      defaultcategorydataset.addValue(4D, s2, s3);
      defaultcategorydataset.addValue(3D, s2, s4);
      defaultcategorydataset.addValue(2D, s2, s5);
      defaultcategorydataset.addValue(3D, s2, s6);
      defaultcategorydataset.addValue(6D, s2, s7);
      return defaultcategorydataset;
     } private static JFreeChart createChart(CategoryDataset categorydataset)
     {
      SpiderWebPlot spiderwebplot = new SpiderWebPlot(categorydataset);
      spiderwebplot.setStartAngle(54D);
      spiderwebplot.setInteriorGap(0.40000000000000002D);
      spiderwebplot.setToolTipGenerator(new StandardCategoryToolTipGenerator());
      JFreeChart jfreechart = new JFreeChart("Spider Web Chart Demo 1", TextTitle.DEFAULT_FONT, spiderwebplot, false);
      LegendTitle legendtitle = new LegendTitle(spiderwebplot);
      legendtitle.setPosition(RectangleEdge.BOTTOM);
      jfreechart.addSubtitle(legendtitle);
      return jfreechart;
     } public static JPanel createDemoPanel()
     {
      JFreeChart jfreechart = createChart(createDataset());
      return new ChartPanel(jfreechart);
     } public static void main(String args[])
     {
      SpiderWebChartDemo1 spiderwebchartdemo1 = new SpiderWebChartDemo1("SpiderWebChartDemo1");
      spiderwebchartdemo1.pack();
      RefineryUtilities.centerFrameOnScreen(spiderwebchartdemo1);
      spiderwebchartdemo1.setVisible(true);
     }
    }