> Java > java지도 시간 > 여러 범주로 JFreeChart 상자 그림을 효과적으로 확장하는 방법은 무엇입니까?

여러 범주로 JFreeChart 상자 그림을 효과적으로 확장하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-06 04:45:02
원래의
879명이 탐색했습니다.

How to Effectively Scale JFreeChart Boxplots with Multiple Categories?

여러 범주로 JFreeChart 상자 그림 확장

문제 설명:

JFreeChart를 사용하여 상자 그림을 생성하는 동안 수많은 카테고리와 시리즈가 있는 CategoryDataset의 경우 차트의 크기가 적절하게 조정되지 않은 것으로 나타났습니다. 서브플롯이 너무 작거나 범례 및 주석이 불균형적으로 큽니다.

적절한 크기 조정 기술:

올바른 크기 조정을 보장하려면 원하는 크기를 설정하는 것이 중요합니다. 차트 자체가 아니라 차트가 포함된 ChartPanel입니다. 이렇게 하면 범례와 주석의 크기와 가독성을 유지하면서 서브플롯만 크기가 조정됩니다.

페이지 기반 접근 방식:

페이지 수가 너무 많은 경우 페이지 기반 접근 방식을 고려하는 것이 더 실용적일 수 있습니다. 여기에는 데이터를 더 작은 하위 집합으로 나누고 한 번에 데이터의 일부만 표시하는 작업이 포함됩니다. 스크롤 막대와 같은 컨트롤 요소를 추가하여 데이터 페이지 사이를 이동할 수 있습니다.

예:

다음 코드는 페이지 기반 구현을 보여줍니다.

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
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;

public class BoxAndWhiskerDemo {

    private List<List<List<Double>>> data;
    private DefaultBoxAndWhiskerCategoryDataset dataset;
    private CategoryPlot plot;
    private ChartPanel chartPanel;
    private JPanel controlPanel;
    private int start = 0;
    private int visible = 4;

    public BoxAndWhiskerDemo() {
        createData();
        createDataset(start);
        createChartPanel();
        createControlPanel();
    }

    // Data generation and dataset creation
    // ...

    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 >= data.size() - visible) {
                    start = data.size() - visible;
                    return;
                }
                createDataset(start);
                plot.setDataset(dataset);
            }
        }));
    }

    // ...

    public static void main(String[] args) {
        BoxAndWhiskerDemo demo = new BoxAndWhiskerDemo();
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(demo.getChartPanel(), BorderLayout.CENTER);
        frame.add(demo.getControlPanel(), BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }
}
로그인 후 복사

이 접근 방식을 사용하면 차트 요소의 명확성을 유지하면서 더 큰 데이터 세트를 보다 관리하기 쉬운 방식으로 표시할 수 있습니다.

위 내용은 여러 범주로 JFreeChart 상자 그림을 효과적으로 확장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿