여러 범주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!