日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/3/24 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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; }

?這次就比較簡單了,因為網上例子不少,記在這里只是給自己以后查找方便,哈

?

總結

以上是生活随笔為你收集整理的jfreechart学习笔记三 带刻度的蜘蛛图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。