ホームページ  >  記事  >  Java  >  複数のカテゴリを含む JFreeChart 箱ひげ図を効果的にスケールする方法?

複数のカテゴリを含む JFreeChart 箱ひげ図を効果的にスケールする方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 04:45:02755ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。