`
pengjj2
  • 浏览: 139325 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

jfreechart学习笔记三 带刻度的蜘蛛图

 
阅读更多



 其实带刻度的蜘蛛图网上也有不少资料,我这个也是参照别人的资料来做的,不管咋样,还是记上吧。

 

先上图

 

 

1、构造dataset

private DefaultCategoryDataset createDataSet2(Map<String, Map<String, Object>> resultMap, List<String> dimNameList) {
       DefaultCategoryDataset dataset = new DefaultCategoryDataset();//创建默认的种类数据类型就可以了,蜘蛛图的每个维度可以看成一种类型
       Set<String> keySet = resultMap.keySet();
       for(String key : keySet){
	Map<String,Object> infoMap = resultMap.get(key);
	String vendorCode = key.split("&")[0];
	String vendorName = key.split("&")[1];
	for(String dimName : dimNameList){
	        if(infoMap.get(dimName)==null){
		continue;
	        }
	       double score = (Double) infoMap.get(dimName);
	      dataset.addValue(score, vendorName.trim()      +"("+vendorCode.trim()+")", dimName);
	}
        }
        return dataset;
}

 

2、因为jfreechart默认的蜘蛛图内容区域对象是不带刻度的,所以我们扩展一个好了,写一个扩展类继承SpiderWebPlot,主要是重写drawLabel方法,这个网上很多地方都有。

public class SpiderWebPlotExpand extends SpiderWebPlot{
	
	   private static final long serialVersionUID = 4005814203754627127L;  
	   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;   
	    
	     
	   
	   public SpiderWebPlotExpand(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 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);   
	           }   
	   }   


}

 3、创建chart

private JFreeChart createChart2(DefaultCategoryDataset dataSet) {
	SpiderWebPlotExpand plot = new SpiderWebPlotExpand(dataSet);
	JFreeChart chart = new JFreeChart("维度得分分析", plot);	return chart;
}

 这次就比较简单了,因为网上例子不少,记在这里只是给自己以后查找方便,哈

 

  • 大小: 27.9 KB
0
1
分享到:
评论
1 楼 yh443042575 2016-04-23  
楼主造福社会呀,顶顶顶!!!

相关推荐

    Jfreechart学习笔记3-简单Line图形创建

    在本篇“JFreeChart学习笔记3-简单Line图形创建”中,我们将深入探讨如何使用JFreeChart库在Java环境中创建基本的线性图表。JFreeChart是一个强大的、开源的Java图表库,它允许开发者轻松地生成各种类型的图表,包括...

    jfreechart雷达图

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的图表,包括柱状图、饼图、线图、散点图以及我们今天关注的雷达图(也称为蜘蛛网图)。在Java应用程序中,JFreeChart提供了丰富的API,使得开发者能够...

    Jfreechart学习笔记1-简单Pie图形创建

    **JFreeChart学习笔记1 - 简单Pie图创建** 在Java开发中,我们经常需要展示数据,而饼图(Pie Chart)是一种常见的数据可视化工具,尤其适用于展示各项比例关系。JFreeChart是一个强大的开源Java图表库,它提供了...

    [原创]JFreechart创建刻度蜘蛛环图

    NULL 博文链接:https://chengshangqian-old.iteye.com/blog/1172486

    Jfreechart学习笔记2-简单bar图形创建

    在本文中,我们将深入探讨如何使用JFreeChart库在Java中创建简单的柱状图,以及如何扩展到3D效果。JFreeChart是一个流行的开源图表库,适用于多种图表类型,包括条形图、线形图、饼图等。通过学习本文,你将能够利用...

    jfreechart学习笔记

    《JFreeChart学习详解》 JFreeChart是一个强大的Java库,用于生成高质量的图表,包括折线图、柱状图、饼图、散点图等多种类型。它在各种应用程序中广泛应用,尤其适合于Web应用程序中数据可视化的实现。本文将通过...

    JfreeChart 学习笔记

    ### JfreeChart 学习笔记:深度解析与应用 #### JFreeChart概览与核心功能 JFreeChart作为一款开源的JAVA项目,专为图表开发而设计,支持丰富的图表类型,包括饼图、柱状图(含普通及堆栈柱状图)、线图、散点图、...

    JFreeChart画雷达图

    在描述中提到的“带刻度雷达图”和“带刻度蜘蛛网”是指在雷达图的轴上显示刻度标记,这样可以更清楚地看到每个轴上的数值。这可以通过调整`RadarPlot`的属性实现,例如设置`setTickLabelsVisible(true)`以显示刻度...

    JFreeChart学习笔记

    **JFreeChart学习笔记** JFreeChart是一款强大的Java图表库,它允许开发者在Java应用程序或Web应用中创建各种复杂的图表,如柱状图、饼图、线形图、散点图、甘特图等。这款开源工具广泛应用于数据分析、报表生成和...

    JfreeChart学习笔记

    在本学习笔记中,我们将深入探讨如何使用 JFreeChart 来构建这些图表,特别是混合图和动态时序图。 首先,构建一个 JFreeChart 图表的基本步骤涉及以下三个主要部分: 1. **创建面板容器**:通常,我们可以继承 `...

    jfreechart实例教程+笔记+流程图

    这个教程将帮助你深入理解和使用 JFreeChart,结合学习笔记、流程图和示例代码,你可以全面掌握 JFreeChart 的核心概念和实践技巧。 首先,我们从 `jfreechart学习笔记.doc` 入手,这份文档应该包含了关于 ...

    JFreeChart学习资料.doc

    JFreeChart 是一款开源的 Java 图形库,用于创建各种统计图表,如饼图、柱状图、折线图等。这份学习资料是针对 JFreeChart 的使用进行讲解,主要涵盖了如何在 Web 项目中集成 JFreeChart 以及创建不同类型的图表。 ...

    jfreechart+applet三维图形实例

    JFreeChart是一个强大的Java图表库,它允许开发者创建多种类型的二维和三维图表,包括柱状图、饼图、线图、散点图等,并且支持自定义颜色、样式和动画效果。Applet是Java的一种小型应用程序,常用于网页中展示交互式...

    jfreechart绘制的风速风向玫瑰图

    jfreechart绘制的风速风向玫瑰图 jfreechart是Java中一个流行的图表库,它提供了许多种类的图表,包括柱状图、折线图、饼图、雷达图等。本文主要介绍如何使用jfreechart绘制风速风向玫瑰图。 首先,了解jfreechart...

    Struts 学习笔记 Struts 中扩展JfreeChart 笔记

    - **使用ChartUtilities类**:JfreeChart提供的ChartUtilities类可以方便地将图表保存为JPEG、PNG等常见图片格式。 4. **实例分析**: - 创建一个Action类,处理数据并调用JfreeChart的ChartFactory创建图表。 -...

    JfreeChart-雷达图与导出

    JFreeChart是一款强大的Java图表库,它允许开发者在Java应用程序或网页中创建多种类型的图表,包括雷达图(也称为蜘蛛网图)。本篇将深入探讨如何利用JFreeChart生成雷达图以及相关的数据导出功能。 **雷达图的使用...

    JfreeChart学习总结JfreeChart学习总结

    JfreeChart学习总结JfreeChart学习总结

Global site tag (gtag.js) - Google Analytics