使用 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);
}
}
我正在开发一个程序,从 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);
}
}