jfreechart 雷达图 看了 jfreechart 雷达图 的demo 那个角度的分割以及标注都是封装了的,我要是想自定义分割数以及各个方向的标注,该怎么办呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); } } } 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); }} Fckeditor 编辑器 上传图片 jdk1.6+tomcat 6.0 在win2003下为什么需要拷贝msvcr71.dll jsp异常报错问题 j2ee动态表单问题 谁有sun.jdbc.rowset.*这个类的包,可不可以给我传一个,谢了 关于调试的问题 下载提示框不显示中文名问题 请问tomcat4.1.18默认的classpath在什么地方? jsp不容忽视的问题!!! JBuilder7+Tomcat4.0如何通过JDBC(非ODBC)连接Oracle。 谁有serlvet 开发包中文API chm格式的 类和对象的一般过程
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); } } }
下面是个雷达图,包加载正确就能看到效果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);
}
}