使用 JFreeChart 实现蜘蛛图

realizing a Spider chart with JFreeChart

我正在开发一个程序,从 JSliders 收集大约二十个滑块值(从值 -4 到 0 的坏滑块和从 0 到 +4 的好滑块) 看起来像这样:

我的程序将所有这 20 个滑块收集在一个数组中,捕获更改滑块的值。

因此,程序应该创建一个图表来查看这些值。因此我必须使用 Spider chart 正如你在这里看到的那样: 蜘蛛

我制作了一个集合,将我的系列添加到图表中: final XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(r1); dataset.addSeries(r2); 通过 JFreeChart

将数据集添加到我的图表中
designed a plot: final XYPlot plot = xylineChart.getXYPlot();

coded my axis:
` ValueAxis domainAxis = plot.getDomainAxis(); // y
ValueAxis rangeAxis = plot.getRangeAxis(); // x

  domainAxis.setRange(0.0, 1.0);
  ((NumberAxis) domainAxis).setTickUnit(new NumberTickUnit(0.5));
  rangeAxis.setRange(0.0, 1.0);
  ((NumberAxis) rangeAxis).setTickUnit(new NumberTickUnit(0.5));

  plot.getRangeAxis().setRange(-4, 4); // Y Achse Range 
  plot.getDomainAxis().setRange(-4,4);   
  final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
 // renderer.setSeriesShapesVisible(0, false);
  renderer.setSeriesPaint( 0 , Color.RED );
  renderer.setSeriesLinesVisible(0, false);
  renderer.setSeriesPaint( 1 , Color.GREEN );
  renderer.setSeriesLinesVisible(1, false);
  plot.setRenderer(renderer);

所以我现在的问题是,如何在蜘蛛图的正确位置显示点。

是否必须为此处的每个点添加坐标系?

例如,我想显示sozialer Druck(=社会压力)我的滑块值-4,然后我必须设置坐标(-3/-2)为[=16] =] 然后 (-2.6,-1.6) 依此类推。

有人可以帮我简化一下吗? (不幸的是,我无法真正将背景图形更改为条形图或其他更简单的图形)

谢谢! @luxora

基于 SpiderWebChartDemo1 and this related example,这里是对我有帮助的完整代码,如果有人试图解决类似的问题:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
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.BufferedImage;
import java.awt.image.ColorModel;

import javax.swing.JPanel;

import org.jfree.chart.ChartPanel;
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.chart.ui.ApplicationFrame;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

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<=8;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) {
        Color bckColor1 = Color.decode("#4282CE"); //Light blue
        Paint p = new GradientPaint(0, 1, bckColor1, 0, 1, bckColor1);

        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(35.0, "S1", "u");
        dataset.addValue(45.0, "S1", "r");
        dataset.addValue(2.0, "S1", "b");
        dataset.addValue(75.0, "S1", "t");
        dataset.addValue(25.0, "S1", "l");
        dataset.addValue(95.0, "S1", "bla");
        dataset.addValue(15.0, "S1", "bla");
        dataset.addValue(45.0, "S1", "bla");
        SpiderWebPlot plot = new SpiderWebPlot(dataset);
        JFreeChart chart = new JFreeChart(plot);
        boolean success = false;
        try {
            BufferedImage image = new BufferedImage(200 , 100, 
                    BufferedImage.TYPE_INT_RGB);
            Graphics2D g2 = image.createGraphics();
            chart.draw(g2, new Rectangle2D.Double(0, 0, 200, 100), null, null);
            g2.dispose();
            success = true;
        }
        catch (Exception e) {
            success = false;
        }
        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();
        spiderwebchartdemo1.setVisible(true);
    }
}