您的位置:首页 > 理论基础 > 计算机网络

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

2011-06-02 22:48 701 查看
画雷达图



/**

* @作者:Jcuckoo

* @日期:2008-12-9

* @版本:V 1.0

*/

public class MySpriderWebPlotTest {

public static void main(String args[]) {

JFrame jf = new JFrame();

jf.add(erstelleSpinnenDiagramm());

jf.pack();

jf.setVisible(true);

}

public static JPanel erstelleSpinnenDiagramm() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

String group1 = "apple ";



dataset.addValue(5, group1, "w1");

dataset.addValue(6, group1, "w2");

dataset.addValue(4, group1, "w3");

dataset.addValue(2, group1, "w4");

dataset.addValue(5, group1, "w5");

dataset.addValue(5, group1, "w6");

dataset.addValue(5, group1, "w7");

dataset.addValue(8, group1, "w8");



SpiderWebPlot spiderwebplot = new SpiderWebPlot(dataset);



JFreeChart jfreechart = new JFreeChart("Test", TextTitle.DEFAULT_FONT,spiderwebplot, false);

LegendTitle legendtitle = new LegendTitle(spiderwebplot);

legendtitle.setPosition(RectangleEdge.BOTTOM);

jfreechart.addSubtitle(legendtitle);



ChartPanel chartpanel = new ChartPanel(jfreechart);

return chartpanel;

}

}

蜘蛛网



public class MySpriderWebPlotTest {

public static void main(String args[]) {

JFrame jf = new JFrame();

jf.add(erstelleSpinnenDiagramm());

jf.pack();

jf.setVisible(true);

}

public static JPanel erstelleSpinnenDiagramm() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

String group1 = "apple ";



dataset.addValue(5, group1, "w1");

dataset.addValue(6, group1, "w2");

dataset.addValue(4, group1, "w3");

dataset.addValue(2, group1, "w4");

dataset.addValue(5, group1, "w5");

dataset.addValue(5, group1, "w6");

dataset.addValue(5, group1, "w7");

dataset.addValue(8, group1, "w8");

String group2 = "orange ";

dataset.addValue(3, group2, "w1");

dataset.addValue(3, group2, "w2");

dataset.addValue(4, group2, "w3");

dataset.addValue(7, group2, "w4");

dataset.addValue(4, group2, "w5");

dataset.addValue(5, group2, "w6");

dataset.addValue(3, group2, "w7");

dataset.addValue(3, group2, "w8");

String group3 = "banana ";

dataset.addValue(4, group3, "w1");

dataset.addValue(5, group3, "w2");

dataset.addValue(2, group3, "w3");

dataset.addValue(5, group3, "w4");

dataset.addValue(6, group3, "w5");

dataset.addValue(6, group3, "w6");

dataset.addValue(4, group3, "w7");

dataset.addValue(4, group3, "w8");

SpiderWebPlot spiderwebplot = new SpiderWebPlot(dataset);

JFreeChart jfreechart = new JFreeChart("Test", TextTitle.DEFAULT_FONT,spiderwebplot, false);

LegendTitle legendtitle = new LegendTitle(spiderwebplot);

legendtitle.setPosition(RectangleEdge.BOTTOM);

jfreechart.addSubtitle(legendtitle);



ChartPanel chartpanel = new ChartPanel(jfreechart);

return chartpanel;

}

}

带刻度问题比较复杂,JFreeChart本身没有提供其功能,需要继承SpiderWebPlot,覆盖drawLabel方法。
此处代码参考Jerry代码,友情感谢。
MySpriderWebPlotTest出自“王杰瑞的技术博客” 博客,请务必保留此出处http://wangjierui.blog.51cto.com/186879/116845

/**

* @本文出自 “王杰瑞的技术博客” 博客,请务必保留此出处 http://wangjierui.blog.51cto.com/186879/116845
*/

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 = 10;

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);

}

}

}

带刻度雷达图



/**

* @作者:Jcuckoo

* @日期:2008-12-9

* @版本:V 1.0

*/

public class MySpriderWebPlotTest {

public static void main(String args[]) {

JFrame jf = new JFrame();

jf.add(erstelleSpinnenDiagramm());

jf.pack();

jf.setVisible(true);

}

public static JPanel erstelleSpinnenDiagramm() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

String group1 = "apple ";



dataset.addValue(5, group1, "w1");

dataset.addValue(6, group1, "w2");

dataset.addValue(4, group1, "w3");

dataset.addValue(2, group1, "w4");

dataset.addValue(5, group1, "w5");

dataset.addValue(5, group1, "w6");

dataset.addValue(5, group1, "w7");

dataset.addValue(8, group1, "w8");

MySpiderWebPlot spiderwebplot = new MySpiderWebPlot(dataset);

JFreeChart jfreechart = new JFreeChart("Test", TextTitle.DEFAULT_FONT,spiderwebplot, false);

LegendTitle legendtitle = new LegendTitle(spiderwebplot);

legendtitle.setPosition(RectangleEdge.BOTTOM);

jfreechart.addSubtitle(legendtitle);



ChartPanel chartpanel = new ChartPanel(jfreechart);

return chartpanel;

}

}

带刻度蜘蛛网



/**

* @作者:Jcuckoo

* @日期:2008-12-9

* @版本:V 1.0

*/

public class MySpriderWebPlotTest {

public static void main(String args[]) {

JFrame jf = new JFrame();

jf.add(erstelleSpinnenDiagramm());

jf.pack();

jf.setVisible(true);

}

public static JPanel erstelleSpinnenDiagramm() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

String group1 = "apple ";



dataset.addValue(5, group1, "w1");

dataset.addValue(6, group1, "w2");

dataset.addValue(4, group1, "w3");

dataset.addValue(2, group1, "w4");

dataset.addValue(5, group1, "w5");

dataset.addValue(5, group1, "w6");

dataset.addValue(5, group1, "w7");

dataset.addValue(8, group1, "w8");

String group2 = "orange ";

dataset.addValue(3, group2, "w1");

dataset.addValue(3, group2, "w2");

dataset.addValue(4, group2, "w3");

dataset.addValue(7, group2, "w4");

dataset.addValue(4, group2, "w5");

dataset.addValue(5, group2, "w6");

dataset.addValue(3, group2, "w7");

dataset.addValue(3, group2, "w8");

String group3 = "banana ";

dataset.addValue(4, group3, "w1");

dataset.addValue(5, group3, "w2");

dataset.addValue(2, group3, "w3");

dataset.addValue(5, group3, "w4");

dataset.addValue(6, group3, "w5");

dataset.addValue(6, group3, "w6");

dataset.addValue(4, group3, "w7");

dataset.addValue(4, group3, "w8");

MySpiderWebPlot spiderwebplot = new MySpiderWebPlot(dataset);

JFreeChart jfreechart = new JFreeChart("Test", TextTitle.DEFAULT_FONT,spiderwebplot, false);

LegendTitle legendtitle = new LegendTitle(spiderwebplot);

legendtitle.setPosition(RectangleEdge.BOTTOM);

jfreechart.addSubtitle(legendtitle);



ChartPanel chartpanel = new ChartPanel(jfreechart);

return chartpanel;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐