Heim  >  Artikel  >  Java  >  Wie skaliert man JFreeChart-Boxplots effektiv mit mehreren Kategorien?

Wie skaliert man JFreeChart-Boxplots effektiv mit mehreren Kategorien?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 04:45:02748Durchsuche

How to Effectively Scale JFreeChart Boxplots with Multiple Categories?

Skalieren von JFreeChart-Boxplots mit mehreren Kategorien

Problemstellung:

Beim Erstellen von Boxplots mit JFreeChart Bei einem CategoryDataset mit zahlreichen Kategorien und Reihen wurde festgestellt, dass das Diagramm nicht richtig skaliert ist. Entweder ist die Nebenhandlung zu klein oder die Legende und die Anmerkungen sind unverhältnismäßig groß.

Richtige Skalierungstechnik:

Um eine korrekte Skalierung sicherzustellen, ist es wichtig, die bevorzugte Größe festzulegen des ChartPanel, das das Diagramm enthält, nicht des Diagramms selbst. Dadurch wird sichergestellt, dass nur die Nebenhandlung skaliert wird, während die Größe und Lesbarkeit der Legende und Anmerkungen erhalten bleibt.

Seitenbasierter Ansatz:

In Fällen mit einer übermäßigen Anzahl von Wenn Sie nach Kategorien suchen, könnte ein seitenbasierter Ansatz praktischer sein. Dabei werden die Daten in kleinere Teilmengen aufgeteilt und jeweils nur ein Teil der Daten angezeigt. Um zwischen den Datenseiten zu navigieren, kann ein Steuerelement wie eine Bildlaufleiste hinzugefügt werden.

Beispiel:

Der folgende Code demonstriert eine seitenbasierte Implementierung:

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);
    }
}

Dieser Ansatz ermöglicht die übersichtlichere Darstellung eines größeren Datensatzes unter Beibehaltung der Klarheit der Diagrammelemente.

Das obige ist der detaillierte Inhalt vonWie skaliert man JFreeChart-Boxplots effektiv mit mehreren Kategorien?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn