chartfactory.java

来自「JfreeChart 常用图表例子」· Java 代码 · 共 1,514 行 · 第 1/5 页

JAVA
1,514
字号
        }        if (urls) {            plot.setURLGenerator(new StandardPieURLGenerator());        }        List keys = dataset.getKeys();        DefaultPieDataset series = null;        if (showDifference) {            series = new DefaultPieDataset();        }        double colorPerPercent = 255.0 / percentDiffForMaxScale;        for (Iterator it = keys.iterator(); it.hasNext();) {            Comparable key = (Comparable) it.next();            Number newValue = dataset.getValue(key);            Number oldValue = previousDataset.getValue(key);            int section = dataset.getIndex(key);            if (oldValue == null) {                if (greenForIncrease) {                    plot.setSectionPaint(section, Color.green);                }                 else {                    plot.setSectionPaint(section, Color.red);                }                if (showDifference) {                    series.setValue(key + " (+100%)", newValue);                }            }            else {                double percentChange = (newValue.doubleValue()                         / oldValue.doubleValue() - 1.0) * 100.0;                double shade                    = (Math.abs(percentChange) >= percentDiffForMaxScale ? 255                    : Math.abs(percentChange) * colorPerPercent);                if (greenForIncrease                         && newValue.doubleValue() > oldValue.doubleValue()                        || !greenForIncrease && newValue.doubleValue()                         < oldValue.doubleValue()) {                    plot.setSectionPaint(section, new Color(0, (int) shade, 0));                }                else {                    plot.setSectionPaint(section, new Color((int) shade, 0, 0));                }                if (showDifference) {                    series.setValue(                        key + " (" + (percentChange >= 0 ? "+" : "")                         + NumberFormat.getPercentInstance().format(                                percentChange / 100.0) + ")", newValue                    );                }            }        }        if (showDifference) {            plot.setDataset(series);        }        JFreeChart chart =  new JFreeChart(            title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend        );        if (subTitle) {            TextTitle subtitle = null;            subtitle = new TextTitle(                "Bright " + (greenForIncrease ? "red" : "green")                + "=change >=-" + percentDiffForMaxScale + "%, Bright "                + (!greenForIncrease ? "red" : "green") + "=change >=+"                + percentDiffForMaxScale + "%",                 new Font("SansSerif", Font.PLAIN, 10)            );            chart.addSubtitle(subtitle);        }        return chart;    }    /**     * Creates a ring chart with default settings.     * <P>     * The chart object returned by this method uses a {@link RingPlot}      * instance as the plot.     *     * @param title  the chart title (<code>null</code> permitted).     * @param dataset  the dataset for the chart (<code>null</code> permitted).     * @param legend  a flag specifying whether or not a legend is required.     * @param tooltips  configure chart to generate tool tips?     * @param urls  configure chart to generate URLs?     *     * @return A pie chart.     */    public static JFreeChart createRingChart(String title,                                             PieDataset dataset,                                             boolean legend,                                             boolean tooltips,                                             boolean urls) {        RingPlot plot = new RingPlot(dataset);        plot.setLabelGenerator(new StandardPieItemLabelGenerator());        plot.setInsets(new RectangleInsets(0.0, 5.0, 5.0, 5.0));        if (tooltips) {            plot.setToolTipGenerator(                new StandardPieItemLabelGenerator(                    StandardPieItemLabelGenerator.DEFAULT_SECTION_LABEL_FORMAT                )            );        }        if (urls) {            plot.setURLGenerator(new StandardPieURLGenerator());        }        return new JFreeChart(            title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend        );    }    /**     * Creates a chart that displays multiple pie plots.  The chart object      * returned by this method uses a {@link MultiplePiePlot} instance as the     * plot.     *     * @param title  the chart title (<code>null</code> permitted).     * @param dataset  the dataset (<code>null</code> permitted).     * @param order  the order that the data is extracted (by row or by column)     *               (<code>null</code> not permitted).     * @param legend  include a legend?     * @param tooltips  generate tooltips?     * @param urls  generate URLs?     *     * @return A chart.     */    public static JFreeChart createMultiplePieChart(String title,                                                    CategoryDataset dataset,                                                    TableOrder order,                                                    boolean legend,                                                    boolean tooltips,                                                    boolean urls) {        if (order == null) {            throw new IllegalArgumentException("Null 'order' argument.");        }        MultiplePiePlot plot = new MultiplePiePlot(dataset);        plot.setDataExtractOrder(order);        plot.setBackgroundPaint(null);        plot.setOutlineStroke(null);        if (tooltips) {            PieToolTipGenerator tooltipGenerator                 = new StandardPieItemLabelGenerator();            PiePlot pp = (PiePlot) plot.getPieChart().getPlot();            pp.setToolTipGenerator(tooltipGenerator);        }        if (urls) {            PieURLGenerator urlGenerator = new StandardPieURLGenerator();            PiePlot pp = (PiePlot) plot.getPieChart().getPlot();            pp.setURLGenerator(urlGenerator);        }        JFreeChart chart = new JFreeChart(            title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend        );        return chart;    }    /**     * Creates a 3D pie chart using the specified dataset.  The chart object      * returned by this method uses a {@link PiePlot3D} instance as the     * plot.     *     * @param title  the chart title (<code>null</code> permitted).     * @param dataset  the dataset for the chart (<code>null</code> permitted).     * @param legend  a flag specifying whether or not a legend is required.     * @param tooltips  configure chart to generate tool tips?     * @param urls  configure chart to generate URLs?     *     * @return A pie chart.     */    public static JFreeChart createPieChart3D(String title,                                              PieDataset dataset,                                              boolean legend,                                              boolean tooltips,                                              boolean urls) {        PiePlot3D plot = new PiePlot3D(dataset);        plot.setInsets(new RectangleInsets(0.0, 5.0, 5.0, 5.0));        if (tooltips) {            plot.setToolTipGenerator(new StandardPieItemLabelGenerator());        }        if (urls) {            plot.setURLGenerator(new StandardPieURLGenerator());        }        return new JFreeChart(            title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend        );    }    /**     * Creates a chart that displays multiple pie plots.  The chart object      * returned by this method uses a {@link MultiplePiePlot} instance as the     * plot.     *     * @param title  the chart title (<code>null</code> permitted).     * @param dataset  the dataset (<code>null</code> permitted).     * @param order  the order that the data is extracted (by row or by column)      *               (<code>null</code> not permitted).     * @param legend  include a legend?     * @param tooltips  generate tooltips?     * @param urls  generate URLs?     *     * @return A chart.     */    public static JFreeChart createMultiplePieChart3D(String title,                                                      CategoryDataset dataset,                                                      TableOrder order,                                                      boolean legend,                                                      boolean tooltips,                                                      boolean urls) {        if (order == null) {            throw new IllegalArgumentException("Null 'order' argument.");        }        MultiplePiePlot plot = new MultiplePiePlot(dataset);        plot.setDataExtractOrder(order);        plot.setBackgroundPaint(null);        plot.setOutlineStroke(null);        JFreeChart pieChart = new JFreeChart(new PiePlot3D(null));        TextTitle seriesTitle = new TextTitle(            "Series Title", new Font("SansSerif", Font.BOLD, 12)        );        seriesTitle.setPosition(RectangleEdge.BOTTOM);        pieChart.setTitle(seriesTitle);        pieChart.removeLegend();        pieChart.setBackgroundPaint(null);        plot.setPieChart(pieChart);        if (tooltips) {            PieToolTipGenerator tooltipGenerator                 = new StandardPieItemLabelGenerator();            PiePlot pp = (PiePlot) plot.getPieChart().getPlot();            pp.setToolTipGenerator(tooltipGenerator);        }        if (urls) {            PieURLGenerator urlGenerator = new StandardPieURLGenerator();            PiePlot pp = (PiePlot) plot.getPieChart().getPlot();            pp.setURLGenerator(urlGenerator);        }        JFreeChart chart = new JFreeChart(            title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend        );        return chart;    }    /**     * Creates a bar chart.  The chart object returned by this method uses a      * {@link CategoryPlot} instance as the plot, with a {@link CategoryAxis}      * for the domain axis, a {@link NumberAxis} as the range axis, and a      * {@link BarRenderer} as the renderer.     *     * @param title  the chart title (<code>null</code> permitted).     * @param categoryAxisLabel  the label for the category axis      *                           (<code>null</code> permitted).     * @param valueAxisLabel  the label for the value axis      *                        (<code>null</code> permitted).     * @param dataset  the dataset for the chart (<code>null</code> permitted).     * @param orientation  the plot orientation (horizontal or vertical)      *                     (<code>null</code> not permitted).     * @param legend  a flag specifying whether or not a legend is required.     * @param tooltips  configure chart to generate tool tips?     * @param urls  configure chart to generate URLs?     *     * @return A bar chart.     */    public static JFreeChart createBarChart(String title,                                            String categoryAxisLabel,                                            String valueAxisLabel,                                            CategoryDataset dataset,                                            PlotOrientation orientation,                                            boolean legend,                                            boolean tooltips,                                            boolean urls) {        if (orientation == null) {            throw new IllegalArgumentException("Null 'orientation' argument.");        }        CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);        ValueAxis valueAxis = new NumberAxis(valueAxisLabel);        BarRenderer renderer = new BarRenderer();        if (orientation == PlotOrientation.HORIZONTAL) {            ItemLabelPosition position1 = new ItemLabelPosition(                ItemLabelAnchor.OUTSIDE3, TextAnchor.CENTER_LEFT            );            renderer.setPositiveItemLabelPosition(position1);            ItemLabelPosition position2 = new ItemLabelPosition(

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?