日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java boxplot_java – 具有多个类别的Boxplots的JFreeChart缩放 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我目前正在使用JFreeChart來創建一個基于java的項目來顯示箱圖.

我的問題是如何顯示包含大約20個類別和5系列的CategoryDataset的箱圖的圖表.

目前,如果未設置ChartPanel的首選大小,則圖例,標簽和注釋可讀,但Boxplots太小.或者設置ChartPanel的大小,以便Boxplots具有可接受的大小,但隨后圖例,標簽和注釋被水平拉伸.

我的問題是,如何在不縮放圖表的軸標簽和注釋的情況下正確縮放箱圖?是否可以在不縮放圖表的所有元素的情況下縮放繪圖?

代碼示例

import java.awt.Color;

import java.awt.Dimension;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

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;

public class StretchedBoxAndWhiskerExample{

DefaultBoxAndWhiskerCategoryDataset dataset;

JFreeChart chart;

ChartPanel chartPanel;

JFrame frame;

JScrollPane scrollPane;

public StretchedBoxAndWhiskerExample() {

createCategoryBoxplot();

frame = new JFrame();

scrollPane = new JScrollPane(chartPanel);

scrollPane.setPreferredSize(new Dimension(800,700));

scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

frame.add(scrollPane);

frame.pack();

frame.setVisible(true);

}

private void createCategoryBoxplot(){

dataset = createCategoryDataset();

CategoryAxis xAxis = new CategoryAxis("");

NumberAxis yAxis = new NumberAxis("Score");

BoxAndWhiskerRenderer renderer = new BoxAndWhiskerRenderer();

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

createJFreeChart(plot,"Test");

// Design

renderer.setFillBox(false);

renderer.setMeanVisible(false);

chart.setBackgroundPaint(Color.white);

plot.setBackgroundPaint(Color.lightGray);

plot.setDomainGridlinePaint(Color.white);

plot.setDomainGridlinesVisible(true);

plot.setRangeGridlinePaint(Color.white);

plot.getRangeAxis().setRange(-10.5, 10.5);

chartPanel = new ChartPanel(chart);

chartPanel.setPreferredSize(new Dimension(3250,600));

}

private DefaultBoxAndWhiskerCategoryDataset createCategoryDataset() {

dataset = new DefaultBoxAndWhiskerCategoryDataset();

ArrayList values = createSampleData();

ArrayList categories = createSampleCategories();

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

for (String category : categories){

dataset.add(values,i,category);

}

}

return dataset;

}

private ArrayList createSampleCategories() {

ArrayList tmp = new ArrayList();

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

tmp.add("Category"+i);

}

return tmp;

}

private ArrayList createSampleData() {

ArrayList tmp = new ArrayList();

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

tmp.add(5.0);

tmp.add(7.0);

tmp.add(2.0);

tmp.add(4.0);

}

return tmp;

}

private void createJFreeChart(CategoryPlot plot, String title){

chart = new JFreeChart(title, plot);

}

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

StretchedBoxAndWhiskerExample demo = new StretchedBoxAndWhiskerExample();

}

}

解決方法:

設置包含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);

}

});

}

}

標簽:java,charts,scaling,boxplot,jfreechart

來源: https://codeday.me/bug/20190626/1294947.html

總結

以上是生活随笔為你收集整理的java boxplot_java – 具有多个类别的Boxplots的JFreeChart缩放的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。