Java Jfreechart Boxplot DefaultBoxAndWiskerCategory数据集初始化

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

我想用来自用户的一些数据(1个boxplot不是很多)绘制一个简单的箱线图(箱线图和胡须图),但jfreechart中的DefaultBoxAndWhiskerCategoryDataset变量有问题。似乎我输入的任何数据都消失了。 绘图始终是三角形而不是箱线图

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);
    }
}