Java Jfreechart Boxplot DefaultBoxAndWiskerCategory数据集初始化
我想用来自用户的一些数据(1个boxplot不是很多)绘制一个简单的箱线图(箱线图和胡须图),但jfreechart中的DefaultBoxAndWhiskerCategoryDataset变量有问题。似乎我输入的任何数据都消失了。 绘图始终是三角形而不是箱线图Java Jfreechart Boxplot DefaultBoxAndWiskerCategory数据集初始化,java,jfreechart,Java,Jfreechart,我想用来自用户的一些数据(1个boxplot不是很多)绘制一个简单的箱线图(箱线图和胡须图),但jfreechart中的DefaultBoxAndWhiskerCategoryDataset变量有问题。似乎我输入的任何数据都消失了。 绘图始终是三角形而不是箱线图 package boxplot; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; import org.jfree.cha
package boxplot;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.BoxAndWhiskerToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BoxAndWhiskerRenderer;
import org.jfree.data.statistics.BoxAndWhiskerCategoryDataset;
import org.jfree.data.statistics.DefaultBoxAndWhiskerCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class Boxplot extends ApplicationFrame{
@SuppressWarnings("deprecation")
public Boxplot(String title) {
super(title);
final BoxAndWhiskerCategoryDataset dataset = createDataset();
final CategoryAxis xAxis = new CategoryAxis("");
final NumberAxis yAxis = new NumberAxis("Value");
yAxis.setAutoRangeIncludesZero(false);
final BoxAndWhiskerRenderer renderer = new BoxAndWhiskerRenderer();
renderer.setFillBox(false);
renderer.setToolTipGenerator(new BoxAndWhiskerToolTipGenerator());
final CategoryPlot plot = new CategoryPlot(dataset, xAxis, yAxis, renderer);
final JFreeChart chart = new JFreeChart(
"Box-and-Whisker Demo",
plot
);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(450, 270));
setContentPane(chartPanel);
}
public static void main(String[] args) {
final Boxplot plot = new Boxplot("");
plot.pack();
RefineryUtilities.centerFrameOnScreen(plot);
plot.setVisible(true);
}
private static DefaultBoxAndWhiskerCategoryDataset createDataset() {
System.out.print("Input the data (use space after every input)");
double[] inputData = getInputData();
ArrayList<Double> inputDataList = new ArrayList<Double>();
for (int i=0;i<100;i++)
inputDataList.add(i, inputData[i]);
final DefaultBoxAndWhiskerCategoryDataset dataset
= new DefaultBoxAndWhiskerCategoryDataset();
dataset.add(inputDataList, "1", "2");
return dataset;
}
private static double[] getInputData() {
Scanner scanner = new Scanner(System.in);
double[] data = new double[100];
Arrays.fill(data, -1);
int index =0;
do
{
double temp = scanner.nextDouble();
if (temp==-1)
break;
data[index++]= temp;
}while (scanner.hasNext());
scanner.close();
return data;
}
}
包装箱线图;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Scanner;
导入org.jfree.chart.ChartPanel;
导入org.jfree.chart.JFreeChart;
导入org.jfree.chart.axis.CategoryAxis;
导入org.jfree.chart.axis.NumberAxis;
导入org.jfree.chart.labels.boxAndWhisterToolTipGenerator;
导入org.jfree.chart.plot.CategoryPlot;
导入org.jfree.chart.renderer.category.BoxAndWhiskerRenderer;
导入org.jfree.data.statistics.boxAndWhiskerCategory数据集;
导入org.jfree.data.statistics.DefaultBoxAndWhiskerCategory数据集;
导入org.jfree.ui.ApplicationFrame;
导入org.jfree.ui.RefineryUtilities;
公共类Boxplot扩展了ApplicationFrame{
@抑制警告(“弃用”)
公共箱线图(字符串标题){
超级(标题);
final BoxAndWhiskerCategoryDataset=createDataset();
最终类别Axis xAxis=新类别Axis(“”);
最终数字xis yAxis=新数字xis(“值”);
yAxis.SetAutoRangeIncludeZero(假);
最终BoxAndWhiskerRender渲染器=新的BoxAndWhiskerRender();
.setFillBox(false);
renderer.setToolTipGenerator(新的boxAndWhisterToolTipGenerator());
最终CategoryPlot=新CategoryPlot(数据集、xAxis、yAxis、渲染器);
最终JFreeChart图表=新JFreeChart图表(
“盒子和胡须演示”,
情节
);
最终图表面板图表面板=新图表面板(图表);
setPreferredSize(新java.awt.Dimension(450270));
setContentPane(图表面板);
}
公共静态void main(字符串[]args){
最终箱线图=新箱线图(“”);
plot.pack();
RefineryUtilities.CenterFrame屏幕(绘图);
plot.setVisible(true);
}
私有静态DefaultBoxAndWhiskerCategoryDataset createDataset(){
系统输出打印(“输入数据(每次输入后使用空格)”;
double[]inputData=getInputData();
ArrayList inputDataList=新的ArrayList();
对于(int i=0;i不清楚您的示例失败的地方。您对相关工厂方法的概述(如图所示)似乎是正确的。从一个更简单的工作示例开始可能更容易。一些注意事项:
- 为了方便起见,我使用
字符串而不是系统构建了扫描仪
- 我还简化了
getInputData()
以返回到列表
,该列表适用于数据集的add()
方法
- Swing GUI对象应仅在上构造和操作
- 如前所述,当您真正想覆盖
getPreferredSize()
时,不要使用setPreferredSize()
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
导入javax.swing.JFrame;
导入org.jfree.chart.ChartFactory;
导入org.jfree.chart.ChartPanel;
导入org.jfree.chart.JFreeChart;
导入org.jfree.data.statistics.DefaultBoxAndWhiskerCategory数据集;
/**
*@见https://stackoverflow.com/a/35814571/230513
*/
公共类箱线图{
私有静态最终字符串行\u KEY=“City”;
专用void display(){
JFrame f=新JFrame(“箱线图”);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultBoxAndWhiskerCategoryDataset数据=新的DefaultBoxAndWhiskerCategoryDataset();
add(getInputData(),第_行键,“科洛桑”);
JFreeChart chart=ChartFactory.CreateBoxandWiskerChart(
“框须图”,行键,“温度”,数据,假);
f、 添加(新图表面板(图表){
@凌驾
公共维度getPreferredSize(){
返回新尺寸(320480);
}
});
f、 包装();
f、 setLocationRelativeTo(空);
f、 setVisible(真);
}
私有列表getInputData(){
扫描仪s=新扫描仪(“30 36 46 55 65 76 81 80 71 59 44 34”);
列表=新的ArrayList();
做{
添加(s.nextDouble());
}而(s.hasNext());
退货清单;
}
公共静态void main(字符串[]args){
invokeLater(new BoxPlot()::display);
}
}
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.statistics.DefaultBoxAndWhiskerCategoryDataset;
/**
* @see https://stackoverflow.com/a/35814571/230513
*/
public class BoxPlot {
private static final String ROW_KEY = "City";
private void display() {
JFrame f = new JFrame("BoxPlot");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultBoxAndWhiskerCategoryDataset data = new DefaultBoxAndWhiskerCategoryDataset();
data.add(getInputData(), ROW_KEY, "Coruscant");
JFreeChart chart = ChartFactory.createBoxAndWhiskerChart(
"Box and Whisker Chart", ROW_KEY, "Temperature", data, false);
f.add(new ChartPanel(chart) {
@Override
public Dimension getPreferredSize() {
return new Dimension(320, 480);
}
});
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private List<Number> getInputData() {
Scanner s = new Scanner("30 36 46 55 65 76 81 80 71 59 44 34");
List<Number> list = new ArrayList<>();
do {
list.add(s.nextDouble());
} while (s.hasNext());
return list;
}
public static void main(String[] args) {
EventQueue.invokeLater(new BoxPlot()::display);
}
}