首頁 > Java > java教程 > 主體

如何有效縮放具有多個類別的 JFreeChart 箱線圖?

Patricia Arquette
發布: 2024-11-06 04:45:02
原創
763 人瀏覽過

How to Effectively Scale JFreeChart Boxplots with Multiple Categories?

使用多個類別縮放JFreeChart 箱線圖

問題陳述:

使用JFree🎜>問題陳述:

使用JFree🎜>問題陳述建立箱線圖時對於具有大量類別和系列的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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!