java boxplot_java – 具有多个类别的Boxplots的JFreeChart缩放

设置包含ChartPanel的首选大小,而不是图表,如图

here和

here所示.

附录:我不认为您可以有用地将图表添加到滚动窗格.相反,创建一个类似于SlidingCategoryDataset的类来实现BoxAndWhiskerCategoryDataset.将滚动条添加到控制第一个显示索引的框架.

附录:一种不那么雄心勃勃的方法就是使用一些合适的控件来分页数据集的一部分,如下例所示.

import java.awt.BorderLayout;

import java.awt.EventQueue;

import java.awt.event.ActionEvent;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import javax.swing.AbstractAction;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

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.plot.CategoryPlot;

import org.jfree.chart.renderer.category.BoxAndWhiskerRenderer;

import org.jfree.data.statistics.DefaultBoxAndWhiskerCategoryDataset;

/** @see https://stackoverflow.com/questions/6844759 */

public class BoxAndWhiskerDemo {

private static final int COLS = 20;

private static final int VISIBLE = 4;

private static final int ROWS = 5;

private static final int VALUES = 10;

private static final Random rnd = new Random();

private List columns;

private List>> data;

private DefaultBoxAndWhiskerCategoryDataset dataset;

private CategoryPlot plot;

private ChartPanel chartPanel;

private JPanel controlPanel;

private int start = 0;

public BoxAndWhiskerDemo() {

createData();

createDataset(start);

createChartPanel();

createControlPanel();

}

private void createData() {

columns = new ArrayList(COLS);

data = new ArrayList>>();

for (int i = 0; i < COLS; i++) {

String name = "Category" + String.valueOf(i + 1);

columns.add(name);

List> list = new ArrayList>();

for (int j = 0; j < ROWS; j++) {

list.add(createValues());

}

data.add(list);

}

}

private List createValues() {

List list = new ArrayList();

for (int i = 0; i < VALUES; i++) {

list.add(rnd.nextGaussian());

}

return list;

}

private void createDataset(int start) {

dataset = new DefaultBoxAndWhiskerCategoryDataset();

for (int i = start; i < start + VISIBLE; i++) {

List> list = data.get(i);

int row = 0;

for (List values : list) {

String category = columns.get(i);

dataset.add(values, "s" + row++, category);

}

}

}

private void createChartPanel() {

CategoryAxis xAxis = new CategoryAxis("Category");

NumberAxis yAxis = new NumberAxis("Value");

BoxAndWhiskerRenderer renderer = new BoxAndWhiskerRenderer();

plot = new CategoryPlot(dataset, xAxis, yAxis, renderer);

JFreeChart chart = new JFreeChart("BoxAndWhiskerDemo", plot);

chartPanel = new ChartPanel(chart);

}

private void createControlPanel() {

controlPanel = new JPanel();

controlPanel.add(new JButton(new AbstractAction("\u22b2Prev") {

@Override

public void actionPerformed(ActionEvent e) {

start -= VISIBLE;

if (start < 0) {

start = 0;

return;

}

createDataset(start);

plot.setDataset(dataset);

}

}));

controlPanel.add(new JButton(new AbstractAction("Next\u22b3") {

@Override

public void actionPerformed(ActionEvent e) {

start += VISIBLE;

if (start > COLS - VISIBLE) {

start = COLS - VISIBLE;

return;

}

createDataset(start);

plot.setDataset(dataset);

}

}));

}

public ChartPanel getChartPanel() {

return chartPanel;

}

public JPanel getControlPanel() {

return controlPanel;

}

public static void main(String[] args) throws IOException {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

BoxAndWhiskerDemo demo = new BoxAndWhiskerDemo();

frame.add(demo.getChartPanel(), BorderLayout.CENTER);

frame.add(demo.getControlPanel(), BorderLayout.SOUTH);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

});

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值