如何在现有的JfreeChart上绘制蜘蛛图

时间:2015-09-30 09:44:55

标签: java swing jpanel awt jfreechart

我有一个jfree图表,每次运行代码时都可以生成。 现在我想在同一个图表上覆盖几个蜘蛛图。请帮我怎么做

enter image description here

在此之上我需要使用jfree添加一个蜘蛛图表。

这是我执行此图表的代码。

package com.rectrix.exide.pdfbox;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Paint;
import java.awt.PaintContext;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.ColorModel;

import javax.swing.JPanel;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
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 DemoChart extends ApplicationFrame {

    public DemoChart(String s)
    {
        super(s);
        JPanel jpanel = createDemoPanel();
        jpanel.setPreferredSize(new Dimension(500, 270));
        setContentPane(jpanel);
    }

    private static CategoryDataset createDataset()
    {


        String s1 = "First";
        String s2 = "Second";
        String s3 = "Third";
        String s4 = "Forth";
        String s5 = "Fivth";
        String s6 = "Sixth";
        String s7 = "Seventh";
        String s8 = "Eighth";
        String s9 = "Ninth";
        String s10 = "Tenth";

        DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
        int count = 5;
        int value = 0;
        //String keyRow="s";
        for (int i=1;i<=10;i++){
            value = i*4;
            Comparable colKey = 0;
            String keyRow = "s"+i;
            for(int j=1;j<=count;j++){
            colKey = j;
                defaultcategorydataset.addValue(value, keyRow, colKey);
            }
        }
return defaultcategorydataset;
    }

    public static JFreeChart createChart1(CategoryDataset categorydataset,double d) {
        SpiderWebPlot plot = new SpiderWebPlot(categorydataset);
        Color bckColor1 = Color.decode("#4282CE"); //Light blue
        Paint p = new GradientPaint(0, 1, bckColor1, 0, 1, bckColor1);
        plot.setSeriesPaint(p);
        JFreeChart chart = new JFreeChart("", plot);
        return chart;
    }


    public static JPanel createDemoPanel()
    {
        JFreeChart jfreechart = createChart1(createDataset(), 10D);
        return new ChartPanel(jfreechart);
    }

    public static void main(String args[])
    {
        DemoChart spiderwebchartdemo1 = new DemoChart("JFreeChart: SpiderWebChartDemo1.java");
        spiderwebchartdemo1.pack();
        RefineryUtilities.centerFrameOnScreen(spiderwebchartdemo1);
        spiderwebchartdemo1.setVisible(true);
    }
}

请尽快帮助我,明天我需要发送这个版本 提前感谢你帮助并努力看到这一点。

1 个答案:

答案 0 :(得分:3)

  

我想在同一张图表上覆盖更多蜘蛛图。

检查spider web plot如何用于显示多变量数据可能会有所帮助。下面的简化示例仅比较两个OBSERVATIONS,每个VARIABLES有五个A .. E名为1 .. 3,其中随机值的范围为B。偶然,变量OBSERVATIONS的值重合;其余的不同。您可以调整import java.awt.EventQueue; import java.util.Random; import javax.swing.JPanel; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.SpiderWebPlot; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.ui.ApplicationFrame; /** @see https://stackoverflow.com/a/32885067/230513 */ public class SpiderChart extends ApplicationFrame { private static final int OBSERVATIONS = 2; private static final int VARIABLES = 5; private static final Random r = new Random(); public SpiderChart(String s) { super(s); add(createDemoPanel()); } private static CategoryDataset createDataset() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); for (int i = 1; i <= OBSERVATIONS; i++) { String rowKey = "Observation " + i; for (int j = 1; j <= VARIABLES; j++) { Comparable colKey = Character.valueOf((char)(j+64)); dataset.addValue(r.nextInt(3) + 1, rowKey, colKey); } } return dataset; } public static JFreeChart createChart(CategoryDataset dataset) { SpiderWebPlot plot = new SpiderWebPlot(dataset); JFreeChart chart = new JFreeChart("Test", plot); return chart; } public static JPanel createDemoPanel() { JFreeChart jfreechart = createChart(createDataset()); return new ChartPanel(jfreechart); } public static void main(String args[]) { EventQueue.invokeLater(() -> { SpiderChart demo = new SpiderChart("SpiderWebChart"); demo.pack(); demo.setDefaultCloseOperation(EXIT_ON_CLOSE); demo.setVisible(true); }); } } 的值来查看效果,但随着观察数量的增加,结果会逐渐变得混乱。您可能希望按照建议here更改系列可见性,或者考虑这些alternatives

spider web plot

{{1}}