Java开发实例大全提高篇——JFreeChart图表篇(二)

第9章  扩展图表技术
9.1  区域图
实例228  基本区域图
    public AreaDemo1(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        DefaultKeyedValues keyedValues = new DefaultKeyedValues();
        keyedValues.addValue("1", 310);
        keyedValues.addValue("2", 489);
        keyedValues.addValue("3", 512);
        keyedValues.addValue("4", 589);
        keyedValues.addValue("5", 359);
        keyedValues.addValue("6", 402);
        CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
                "java book", keyedValues);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createAreaChart("2010.1-6 sales volume", // 图表标题
                "month", // x轴标签
                "sales", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                false, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 创建图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));

    }

    public static void main(String[] args) {
        AreaDemo1 demo = new AreaDemo1("区域图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }


实例229  显示多分类区域图
    public AreaDemo2(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createAreaChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }


    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        AreaDemo2 demo = new AreaDemo2("区域图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例230  设置区域图透明度
    public AreaDemo3(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createAreaChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        //设置透明度
        categoryPlot.setForegroundAlpha(0.5f);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        AreaDemo3 demo = new AreaDemo3("区域图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例231  添加说明文字
    public AreaDemo4(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createAreaChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        categoryPlot.setForegroundAlpha(0.5f);
        //添加说明文字
        TextTitle subtitle = new TextTitle(
                "下图显示明日科技公司2010上半年(1-6月份)图书销售情况,根据图表显示情况2010上半年中JAVA图书的销售占比较大的比重,VC和VB相比JAVA图书的销售少了一些。");
        chart.addSubtitle(subtitle);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        AreaDemo4 demo = new AreaDemo4("区域图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例232  设置说明文字位置
    public AreaDemo5(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createAreaChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        categoryPlot.setForegroundAlpha(0.5f);
        TextTitle subtitle = new TextTitle(
                "下图显示明日科技公司2010上半年(1-6月份)图书销售情况,根据图表显示情况2010上半年中JAVA图书的销售占比较大的比重,VC和VB相比JAVA图书的销售少了一些。");
        //设置显示位置
        subtitle.setPosition(RectangleEdge.LEFT);
        subtitle.setPaint(Color.GREEN);
        chart.addSubtitle(subtitle);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        AreaDemo5 demo = new AreaDemo5("区域图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例233  区域图X轴显示位置
    public AreaDemo6(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createAreaChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        //区域图X轴显示位置
        categoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_LEFT);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        AreaDemo6 demo = new AreaDemo6("区域图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例234  区域图X轴标签角度
    public AreaDemo7(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createAreaChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        //区域图X轴标签角度
        categoryAxis.setLabelAngle(Math.PI*0.3);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        AreaDemo7 demo = new AreaDemo7("区域图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例235  区域图X轴尺度标签角度
    public AreaDemo8(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createAreaChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        //区域图X轴尺度标签角度
        categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        AreaDemo8 demo = new AreaDemo8("区域图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例236  设置区域颜色
    public AreaDemo9(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createAreaChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        //设置透明度
        categoryPlot.setForegroundAlpha(0.7f);
        AreaRenderer renderer = (AreaRenderer) categoryPlot.getRenderer();
        // 设置区域颜色
        renderer.setSeriesPaint(0, Color.BLACK);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        AreaDemo9 demo = new AreaDemo9("区域图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

9.2  气泡图
实例237  基本气泡图
    public BubbleDemo1(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYZDataset getDataset() {

        // 系例关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        
        // 创建数据集
        DefaultXYZDataset dataset = new DefaultXYZDataset();
        double data1 [] [] =    new double[][] {{600}, {10}, {600/(10*10)}};
        double data2 [] [] =    new double[][] {{650}, {10}, {650/(10*10)}};
        double data3 [] [] =    new double[][] {{800}, {16}, {800/(16*10)}};

        dataset.addSeries(series1, data1);
        dataset.addSeries(series2, data2);
        dataset.addSeries(series3, data3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYZDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createBubbleChart("2010年上半年销售量", // 图表标题
                "page", // x轴标签
                "chapter", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        BubbleDemo1 demo = new BubbleDemo1("气泡图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例238  气泡图X轴标签
    public BubbleDemo2(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYZDataset getXYZDataset() {

        // 系例关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        
        // 创建分类数据集
        DefaultXYZDataset dataset = new DefaultXYZDataset();
        double data1 [] [] =    new double[][] {{600}, {10}, {600/(10*10)}};
        double data2 [] [] =    new double[][] {{650}, {10}, {650/(10*10)}};
        double data3 [] [] =    new double[][] {{800}, {16}, {800/(16*10)}};

        dataset.addSeries(series1, data1);
        dataset.addSeries(series2, data2);
        dataset.addSeries(series3, data3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYZDataset dataset = getXYZDataset();
        JFreeChart chart = ChartFactory.createBubbleChart("2010年上半年销售量", // 图表标题
                "页数", // x轴标签
                "chapter", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        
        XYPlot plot = chart.getXYPlot();
        //设置X轴字体
        NumberAxis numberAxis = (NumberAxis) plot.getDomainAxis();
        numberAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        BubbleDemo2 demo = new BubbleDemo2("气泡图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例239  气泡图Y轴标签
    public BubbleDemo3(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYZDataset getXYZDataset() {

        // 系例关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        
        // 创建分类数据集
        DefaultXYZDataset dataset = new DefaultXYZDataset();
        double data1 [] [] =    new double[][] {{600}, {10}, {600/(10*10)}};
        double data2 [] [] =    new double[][] {{650}, {10}, {650/(10*10)}};
        double data3 [] [] =    new double[][] {{800}, {16}, {800/(16*10)}};

        dataset.addSeries(series1, data1);
        dataset.addSeries(series2, data2);
        dataset.addSeries(series3, data3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYZDataset dataset = getXYZDataset();
        JFreeChart chart = ChartFactory.createBubbleChart("2010年上半年销售量", // 图表标题
                "页数", // x轴标签
                "章数", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        
        XYPlot plot = chart.getXYPlot();
        //X轴字体
        NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        //Y轴字体
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        BubbleDemo3 demo = new BubbleDemo3("气泡图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例240  设置坐标范围
    public BubbleDemo4(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYZDataset getXYZDataset() {

        // 系例关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        
        // 创建分类数据集
        DefaultXYZDataset dataset = new DefaultXYZDataset();
        double data1 [] [] =    new double[][] {{600}, {10}, {600/(10*10)}};
        double data2 [] [] =    new double[][] {{650}, {10}, {650/(10*10)}};
        double data3 [] [] =    new double[][] {{800}, {16}, {800/(16*10)}};

        dataset.addSeries(series1, data1);
        dataset.addSeries(series2, data2);
        dataset.addSeries(series3, data3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYZDataset dataset = getXYZDataset();
        JFreeChart chart = ChartFactory.createBubbleChart("2010年上半年销售量", // 图表标题
                "页数", // x轴标签
                "章数", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        
        XYPlot plot = chart.getXYPlot();
        //X轴
        NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        //Y轴
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        XYPlot plot = chart.getXYPlot();
        //X轴
        NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
        //设置范围
        domainAxis.setLowerBound(500);
        domainAxis.setUpperBound(900);
        //Y轴
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        //设置范围
        rangeAxis.setLowerBound(7);
        rangeAxis.setUpperBound(19);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        BubbleDemo4 demo = new BubbleDemo4("气泡图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例241  设置透明度
    public BubbleDemo5(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYZDataset getDataset() {

        // 系例关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        
        // 创建分类数据集
        DefaultXYZDataset dataset = new DefaultXYZDataset();
        double data1 [] [] =    new double[][] {{600}, {10}, {600/(10*10)}};
        double data2 [] [] =    new double[][] {{650}, {10}, {650/(10*10)}};
        double data3 [] [] =    new double[][] {{800}, {16}, {800/(16*10)}};

        dataset.addSeries(series1, data1);
        dataset.addSeries(series2, data2);
        dataset.addSeries(series3, data3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYZDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createBubbleChart("2010年上半年销售量", // 图表标题
                "页数", // x轴标签
                "章数", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        
        XYPlot plot = chart.getXYPlot();
        //X轴
        NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        //Y轴
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        XYPlot plot = chart.getXYPlot();
        //设置透明度
        plot.setForegroundAlpha(0.4f);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        BubbleDemo5 demo = new BubbleDemo5("气泡图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例242  设置气泡颜色
    public BubbleDemo6(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYZDataset getDataset() {

        // 系例关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        
        // 创建分类数据集
        DefaultXYZDataset dataset = new DefaultXYZDataset();
        double data1 [] [] =    new double[][] {{600}, {10}, {600/(10*10)}};
        double data2 [] [] =    new double[][] {{650}, {10}, {650/(10*10)}};
        double data3 [] [] =    new double[][] {{800}, {16}, {800/(16*10)}};

        dataset.addSeries(series1, data1);
        dataset.addSeries(series2, data2);
        dataset.addSeries(series3, data3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYZDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createBubbleChart("2010年上半年销售量", // 图表标题
                "页数", // x轴标签
                "章数", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        
        XYPlot plot = chart.getXYPlot();
        //X轴
        NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        //Y轴
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        XYPlot plot = chart.getXYPlot();
        //设置透明度
        plot.setForegroundAlpha(0.8f);
        //设置气泡颜色
        XYBubbleRenderer renderer =(XYBubbleRenderer) plot.getRenderer();
        renderer.setSeriesPaint(0, Color.YELLOW);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        BubbleDemo6 demo = new BubbleDemo6("气泡图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例243  气泡图X轴标签角度
    public BubbleDemo7(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYZDataset getDataset() {

        // 系例关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        
        // 创建分类数据集
        DefaultXYZDataset dataset = new DefaultXYZDataset();
        double data1 [] [] =    new double[][] {{600}, {10}, {600/(10*10)}};
        double data2 [] [] =    new double[][] {{650}, {10}, {650/(10*10)}};
        double data3 [] [] =    new double[][] {{800}, {16}, {800/(16*10)}};

        dataset.addSeries(series1, data1);
        dataset.addSeries(series2, data2);
        dataset.addSeries(series3, data3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYZDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createBubbleChart("2010年上半年销售量", // 图表标题
                "页数", // x轴标签
                "章数", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        
        XYPlot plot = chart.getXYPlot();
        //X轴
        NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        //Y轴
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        XYPlot plot = chart.getXYPlot();
        //设置透明度
        plot.setForegroundAlpha(0.8f);
        ValueAxis valueAxis = plot.getDomainAxis();
        //气泡图X轴标签角度
        valueAxis.setLabelAngle(Math.PI*0.3);
        ValueAxis valueAxis1 = plot.getRangeAxis();
        //气泡图X轴标签角度
        valueAxis1.setLabelAngle(Math.PI*0.3);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        BubbleDemo7 demo = new BubbleDemo7("气泡图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例244  气泡图X轴尺度标签角度
    public BubbleDemo8(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYZDataset getDataset() {

        // 系例关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        
        // 创建分类数据集
        DefaultXYZDataset dataset = new DefaultXYZDataset();
        double data1 [] [] =    new double[][] {{600}, {10}, {600/(10*10)}};
        double data2 [] [] =    new double[][] {{650}, {10}, {650/(10*10)}};
        double data3 [] [] =    new double[][] {{800}, {16}, {800/(16*10)}};

        dataset.addSeries(series1, data1);
        dataset.addSeries(series2, data2);
        dataset.addSeries(series3, data3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYZDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createBubbleChart("2010年上半年销售量", // 图表标题
                "页数", // x轴标签
                "章数", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        
        XYPlot plot = chart.getXYPlot();
        //X轴
        NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        //Y轴
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        XYPlot plot = chart.getXYPlot();
        //设置透明度
        plot.setForegroundAlpha(0.8f);
        ValueAxis valueAxis = plot.getDomainAxis();
        //气泡图X轴尺度标签角度
        valueAxis.setVerticalTickLabels(true);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        BubbleDemo8 demo = new BubbleDemo8("气泡图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

9.3  分步图
实例245  基本分步图
    public CategoryStepDemp1(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        // 设置分布图渲染
        CategoryStepRenderer renderer = new CategoryStepRenderer(true);
        // 创建X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        // 创建Y轴
        ValueAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        // 生成图表
        CategoryPlot plot = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer);
        final JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CategoryStepDemp1 demo = new CategoryStepDemp1("分步图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例246  加粗分步图
    public CategoryStepDemp2(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        //设置分布图渲染
        CategoryItemRenderer renderer = new CategoryStepRenderer(true);
        //创建X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        //创建Y轴
        ValueAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        //生成图表
        CategoryPlot plot = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer);
        final JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        CategoryPlot plot = chart.getCategoryPlot();
        CategoryStepRenderer renderer =  (CategoryStepRenderer) plot.getRenderer();
        //加粗分步图
        renderer.setSeriesStroke(0,new BasicStroke(5));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CategoryStepDemp2 demo = new CategoryStepDemp2("分步图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例247  显示虚线效果
    public CategoryStepDemp3(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        //设置分布图渲染
        CategoryItemRenderer renderer = new CategoryStepRenderer(true);
        //创建X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        //创建Y轴
        ValueAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        //生成图表
        CategoryPlot plot = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer);
        final JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        CategoryPlot plot = chart.getCategoryPlot();
        CategoryStepRenderer renderer =  (CategoryStepRenderer) plot.getRenderer();
        //显示虚线效果
        renderer.setSeriesStroke(0,new BasicStroke(5,BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND,1, new float[] {10.0f, 16.0f}, 0.0f));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CategoryStepDemp3 demo = new CategoryStepDemp3("分步图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例248  设置分步图颜色
    public CategoryStepDemp4(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        //设置分布图渲染
        CategoryItemRenderer renderer = new CategoryStepRenderer(true);
        //创建X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        //创建Y轴
        ValueAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        //生成图表
        CategoryPlot plot = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer);
        final JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        CategoryPlot plot = chart.getCategoryPlot();
        CategoryStepRenderer renderer =  (CategoryStepRenderer) plot.getRenderer();
        //设置分步图颜色
        renderer.setSeriesPaint(0, Color.BLACK);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CategoryStepDemp4 demo = new CategoryStepDemp4("分步图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例249  隐藏分步图
    public CategoryStepDemp5(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        // 设置分布图渲染
        CategoryItemRenderer renderer = new CategoryStepRenderer(true);
        // 创建X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        // 创建Y轴
        ValueAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        // 生成图表
        CategoryPlot plot = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer);
        final JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        CategoryPlot plot = chart.getCategoryPlot();
        CategoryStepRenderer renderer = (CategoryStepRenderer) plot
                .getRenderer();
        // 隐藏分步图
        renderer.setSeriesVisible(0, new Boolean(false));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CategoryStepDemp5 demo = new CategoryStepDemp5("分步图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例250  分步图X轴显示位置
    public CategoryStepDemp6(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        // 设置分布图渲染
        CategoryItemRenderer renderer = new CategoryStepRenderer(true);
        // 创建X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        // 创建Y轴
        ValueAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        // 生成图表
        CategoryPlot plot = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer);
        final JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        CategoryPlot plot = chart.getCategoryPlot();
        //分步图X轴显示位置
        plot.setDomainAxisLocation(AxisLocation.TOP_OR_LEFT);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CategoryStepDemp6 demo = new CategoryStepDemp6("分步图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例251  分步图X轴标签角度
    public CategoryStepDemp7(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        // 设置分布图渲染
        CategoryItemRenderer renderer = new CategoryStepRenderer(true);
        // 创建X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        // 创建Y轴
        ValueAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        // 生成图表
        CategoryPlot plot = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer);
        final JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        CategoryPlot plot = chart.getCategoryPlot();
        CategoryAxis categoryAxis = plot.getDomainAxis();
        // 分步图X轴标签角度
        categoryAxis.setLabelAngle(Math.PI * 0.3);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CategoryStepDemp7 demo = new CategoryStepDemp7("分步图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例252  分步图X轴尺度标签角度
    public CategoryStepDemp8(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        // 设置分布图渲染
        CategoryItemRenderer renderer = new CategoryStepRenderer(true);
        // 创建X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        // 创建Y轴
        ValueAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        // 生成图表
        CategoryPlot plot = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer);
        final JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        CategoryPlot plot = chart.getCategoryPlot();
        CategoryAxis categoryAxis = plot.getDomainAxis();
        // 区域图X轴尺度标签角度
        categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CategoryStepDemp8 demo = new CategoryStepDemp8("分步图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

9.4  联合分类图
实例253  生成线形图与柱形图
    public CombinedCategoryDemo1(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        //生成线形图渲染
        LineAndShapeRenderer renderer1 = new LineAndShapeRenderer();
        //生成柱形图渲染
        BarRenderer renderer2 = new BarRenderer();
        //设置X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        //设置Y轴
        NumberAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        //设置图表
        CategoryPlot plot1 = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer1);
        CategoryPlot plot2 = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer2);
        //设置联合分类图表
        final CombinedDomainCategoryPlot plot = new CombinedDomainCategoryPlot(
                domainAxis);
        plot.add(plot1);
        plot.add(plot2);
        JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CombinedCategoryDemo1 demo = new CombinedCategoryDemo1("联合分类图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例254  设置图表高度
    public CombinedCategoryDemo2(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        //生成线形图渲染
        LineAndShapeRenderer renderer1 = new LineAndShapeRenderer();
        //生成柱形图渲染
        BarRenderer renderer2 = new BarRenderer();
        //设置X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        //设置Y轴
        NumberAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        //设置图表
        CategoryPlot plot1 = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer1);
        CategoryPlot plot2 = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer2);
        //设置联合分类图表
       final CombinedDomainCategoryPlot plot = new CombinedDomainCategoryPlot(domainAxis);
       //设置图表高度
        plot.add(plot1, 1);
        plot.add(plot2, 2);
        JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CombinedCategoryDemo2 barDemo = new CombinedCategoryDemo2("联合分类图");
        barDemo.createPlot();
        barDemo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(barDemo);
        // 设置可以显示
        barDemo.setVisible(true);
    }

实例255  设置图表位置
    public CombinedCategoryDemo3(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        //生成线形图渲染
        LineAndShapeRenderer renderer1 = new LineAndShapeRenderer();
        //生成柱形图渲染
        BarRenderer renderer2 = new BarRenderer();
        //设置X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        //设置Y轴
        NumberAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        //设置图表
        CategoryPlot plot1 = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer1);
        CategoryPlot plot2 = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer2);
        //设置联合分类图表
       final CombinedDomainCategoryPlot plot = new CombinedDomainCategoryPlot(domainAxis);
       //设置联合图表
           plot.add(plot2, 1);
        plot.add(plot1, 1);
        JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CombinedCategoryDemo3 barDemo = new CombinedCategoryDemo3("联合分类图");
        barDemo.createPlot();
        barDemo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(barDemo);
        // 设置可以显示
        barDemo.setVisible(true);
    }

实例256  线形图与分布图
    public CombinedCategoryDemo4(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        //生成线形图渲染
        LineAndShapeRenderer renderer1 = new LineAndShapeRenderer();
        //分步图渲染
        CategoryStepRenderer renderer2 = new CategoryStepRenderer();
        //设置X轴
        CategoryAxis domainAxis = new CategoryAxis("月份");
        //设置Y轴
        NumberAxis rangeAxis = new NumberAxis("销售量(单位:本)");
        //设置图表
        CategoryPlot plot1 = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer1);
        CategoryPlot plot2 = new CategoryPlot(dataset, domainAxis, rangeAxis,
                renderer2);
        //设置联合分类图表
        final CombinedDomainCategoryPlot plot = new CombinedDomainCategoryPlot(domainAxis);
        plot.add(plot1);
        plot.add(plot2);
        JFreeChart chart = new JFreeChart("2010年上半年销售量", plot);
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        CombinedCategoryDemo4 demo = new CombinedCategoryDemo4("联合分类图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

9.5  双轴图
实例257  基本双轴图
    public DualAxisDemo1(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset1() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        return dataset;
    }
    
    private CategoryDataset getCategoryDataset2() {
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";
        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset1();
        JFreeChart chart = ChartFactory.createBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        categoryPlot.setDataset(1,getCategoryDataset2());
        //线形渲染
        LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();
        //设置线形图
        categoryPlot.setRenderer(1, renderer2);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        DualAxisDemo1 demo = new DualAxisDemo1("双轴图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例258  基本双Y轴图
    public DualAxisDemo2(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset1() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        return dataset;
    }
    
    private CategoryDataset getCategoryDataset2() {
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";
        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset1();
        JFreeChart chart = ChartFactory.createBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {


        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        categoryPlot.setDataset(1,getCategoryDataset2());
        LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();
        //设置线形图
        categoryPlot.setRenderer(1, renderer2);
        //设置双Y轴
        final ValueAxis axis2 = new NumberAxis("网购销售量");
        //设置Y轴最大值
        axis2.setUpperBound(200);
        categoryPlot.setRangeAxis(1, axis2);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        DualAxisDemo2 demo = new DualAxisDemo2("双轴图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例259  双Y轴字体
    public DualAxisDemo3(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset1() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        return dataset;
    }
    
    private CategoryDataset getCategoryDataset2() {
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";
        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset1();
        JFreeChart chart = ChartFactory.createBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {


        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        categoryPlot.setDataset(1,getCategoryDataset2());
        LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();

        //设置线形图
        categoryPlot.setRenderer(1, renderer2);
        final ValueAxis axis2 = new NumberAxis("网购销售量");
        // y轴字体
        axis2.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        axis2.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        //设置最大值
        axis2.setUpperBound(200);
        categoryPlot.setRangeAxis(1, axis2);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        DualAxisDemo3 demo = new DualAxisDemo3("双轴图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例260  3D双轴图
    public DualAxisDemo4(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset1() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        return dataset;
    }
    
    private CategoryDataset getCategoryDataset2() {
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";
        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset1();
        JFreeChart chart = ChartFactory.createBarChart3D("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {
        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        categoryPlot.setDataset(1,getCategoryDataset2());
//        LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();
        LineRenderer3D renderer2 = new LineRenderer3D();
        //设置线形图
        categoryPlot.setRenderer(1, renderer2);
        final ValueAxis axis2 = new NumberAxis("网购销售量");
        // y轴字体
        axis2.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        axis2.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        axis2.setUpperBound(200);
        categoryPlot.setRangeAxis(1, axis2);
        
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        DualAxisDemo4 demo = new DualAxisDemo4("双轴图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例261  设置双轴图颜色
    public DualAxisDemo5(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset1() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        return dataset;
    }
    
    private CategoryDataset getCategoryDataset2() {
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";
        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset1();
        JFreeChart chart = ChartFactory.createBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {


        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        categoryPlot.setDataset(1,getCategoryDataset2());
        //线形渲染
        LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();
        //设置线形图颜色
        renderer2.setSeriesPaint(0, Color.black);
        //设置线形图
        categoryPlot.setRenderer(1, renderer2);
        
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        DualAxisDemo5 demo = new DualAxisDemo5("双轴图实例");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例262  双轴图X轴标签角度
    public DualAxisDemo6(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset1() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        return dataset;
    }
    
    private CategoryDataset getCategoryDataset2() {
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";
        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset1();
        JFreeChart chart = ChartFactory.createBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {


        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        categoryPlot.setDataset(1,getCategoryDataset2());
        LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();

        //设置线形图
        categoryPlot.setRenderer(1, renderer2);
        final ValueAxis axis2 = new NumberAxis("网购销售量");
        // y轴字体
        axis2.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        axis2.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        //设置最大值
        axis2.setUpperBound(200);
        categoryPlot.setRangeAxis(1, axis2);
        
        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        //双轴图X轴标签角度
        categoryAxis.setLabelAngle(Math.PI*0.3);


    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        DualAxisDemo6 demo = new DualAxisDemo6("双轴图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例263  双轴图X轴尺度标签角度
    public DualAxisDemo7(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset1() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        return dataset;
    }
    
    private CategoryDataset getCategoryDataset2() {
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";
        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset1();
        JFreeChart chart = ChartFactory.createBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {


        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        categoryPlot.setDataset(1,getCategoryDataset2());
        LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();

        //设置线形图
        categoryPlot.setRenderer(1, renderer2);
        final ValueAxis axis2 = new NumberAxis("网购销售量");
        // y轴字体
        axis2.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        axis2.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        //设置最大值
        axis2.setUpperBound(200);
        categoryPlot.setRangeAxis(1, axis2);
        
        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        //双轴图X轴尺度标签角度
        categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        DualAxisDemo7 demo = new DualAxisDemo7("双轴图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


9.6  折线图
实例264  基本折线图
    public LineDemo1(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        DefaultKeyedValues keyedValues = new DefaultKeyedValues();
        keyedValues.addValue("1", 310);
        keyedValues.addValue("2", 489);
        keyedValues.addValue("3", 512);
        keyedValues.addValue("4", 589);
        keyedValues.addValue("5", 359);
        keyedValues.addValue("6", 402);
        CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
                "JAVA图书", keyedValues);
        return dataset;
    }


    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo1 demo = new LineDemo1("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }

实例265  多条折线图
    public LineDemo2(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 系列关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 分类关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo2 demo = new LineDemo2("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例266  水平折线图
    public LineDemo3(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 系列关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 分类关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.HORIZONTAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo3 demo = new LineDemo3("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例267  隐藏折线图
    public LineDemo4(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 系列关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 分类关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        LineAndShapeRenderer renderer = (LineAndShapeRenderer) categoryPlot.getRenderer();
        //隐藏指定线形
        renderer.setSeriesLinesVisible(0, false);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo4 demo = new LineDemo4("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例268  加粗折线
    public LineDemo5(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 系列关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 分类关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        LineAndShapeRenderer renderer = (LineAndShapeRenderer) categoryPlot.getRenderer();
        //加粗线形
        renderer.setSeriesStroke(0,new BasicStroke(5));


    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo5 demo = new LineDemo5("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例269  显示折线节点
    public LineDemo6(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        LineAndShapeRenderer renderer = (LineAndShapeRenderer) categoryPlot.getRenderer();
        //显示节点
        renderer.setSeriesShapesVisible(0, true);
        renderer.setSeriesShapesVisible(1, true);
        renderer.setSeriesShapesVisible(2, true);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo6 demo = new LineDemo6("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例270  生成节点图
    public LineDemo7(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        LineAndShapeRenderer renderer = (LineAndShapeRenderer) categoryPlot.getRenderer();
        //只显示节点
        renderer.setSeriesLinesVisible(0, false);
        renderer.setSeriesLinesVisible(1, false);
        renderer.setSeriesLinesVisible(2, false);
        renderer.setSeriesShapesVisible(0, true);
        renderer.setSeriesShapesVisible(1, true);
        renderer.setSeriesShapesVisible(2, true);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo7 demo = new LineDemo7("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例271  设置虚线图
    public LineDemo8(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        LineAndShapeRenderer renderer = (LineAndShapeRenderer) categoryPlot
                .getRenderer();
        // 虚线
        renderer.setSeriesStroke(0, new BasicStroke(5, BasicStroke.CAP_ROUND,
                BasicStroke.JOIN_ROUND, 1, new float[] { 10.0f, 16.0f }, 0.0f));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo8 demo = new LineDemo8("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例272  设置折线颜色
    public LineDemo9(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        LineAndShapeRenderer renderer = (LineAndShapeRenderer) chart.getCategoryPlot().getRenderer();
        //设置显示颜色
        renderer.setSeriesPaint(0, Color.black);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo9 demo = new LineDemo9("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例273  3D折线图
    public LineDemo10(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart3D("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        LineRenderer3D renderer3d = (LineRenderer3D) categoryPlot.getRenderer();
        renderer3d.setWallPaint(Color.orange);
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo10 demo = new LineDemo10("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例274  XY折线图
    public LineDemo11(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private IntervalXYDataset getDataset() {

        final XYSeries series1 = new XYSeries("JAVA图书");
        final XYSeries series2 = new XYSeries("VC图书");
        final XYSeries series3 = new XYSeries("VB图书");

        series1.add(501, 3);
        series1.add(200, 2);
        series1.add(308, 2);
        series1.add(580, 4);
        series1.add(418, 2);
        series1.add(315, 1);

        series2.add(480, 2);
        series2.add(381, 3);
        series2.add(264, 1);
        series2.add(185, 2);
        series2.add(209, 2);
        series2.add(302, 2);

        series3.add(310, 2);
        series3.add(489, 2);
        series3.add(512, 3);
        series3.add(589, 4);
        series3.add(359, 2);
        series3.add(402, 2);

        final XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(series1);
        dataset.addSeries(series2);
        dataset.addSeries(series3);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        IntervalXYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createXYLineChart("2010年上半年图书完成量", // 图表标题
                "完成页数", // x轴标签
                "人员数量", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        XYPlot plot = chart.getXYPlot();
        NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
        // X轴字体
        domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = plot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo11 demo = new LineDemo11("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例275  排序折线图
    public LineDemo12(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        DefaultKeyedValues keyedValues = new DefaultKeyedValues();
        keyedValues.addValue("1", 310);
        keyedValues.addValue("2", 489);
        keyedValues.addValue("3", 512);
        keyedValues.addValue("4", 589);
        keyedValues.addValue("5", 359);
        keyedValues.addValue("6", 402);
        //排序
        keyedValues.sortByValues(SortOrder.ASCENDING);
        CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
                "JAVA图书", keyedValues);
        
        return dataset;
    }


    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createLineChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        LineDemo12 demo = new LineDemo12("折线图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }

9.7  环形图
实例276  基本环形图
    public RingDeom1(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private PieDataset getPieDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("java book", 1689);
        dataset.setValue("vc book", 810);
        dataset.setValue("vb book", 490);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        PieDataset dataset = getPieDataset();
        JFreeChart chart = ChartFactory.createRingChart(
                "2010.1-6 sales volume", // 图表标题
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));

    }

    public static void main(String[] args) {
        RingDeom1 demo = new RingDeom1("环形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }

实例277  环形图字体
    public RingDeom2(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private PieDataset getPieDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("JAVA从入门到精通(第2版)", 500);
        dataset.setValue("视频学JAVA", 800);
        dataset.setValue("JAVA全能速查宝典", 1000);
        dataset.setValue("Java范例完全自学手册(1DVD)", 400);
        dataset.setValue("Java开发典型模块大全", 750);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        PieDataset dataset = getPieDataset();
        JFreeChart chart = ChartFactory.createRingChart(
                "2010上半年销售记录", // 图表标题
                dataset, // 数据集
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 图表
        RingPlot ringPlot = (RingPlot) chart.getPlot();
        ringPlot.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        ringPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
        "{0}:{1}"));

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 设置字体
        updateFont(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));

    }

    public static void main(String[] args) {
        RingDeom2 demo = new RingDeom2("环形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }

实例278  设置环形深度
    public RingDeom3(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private PieDataset getPieDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("JAVA从入门到精通(第2版)", 500);
        dataset.setValue("视频学JAVA", 800);
        dataset.setValue("JAVA全能速查宝典", 1000);
        dataset.setValue("Java范例完全自学手册(1DVD)", 400);
        dataset.setValue("Java开发典型模块大全", 750);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        PieDataset dataset = getPieDataset();
        JFreeChart chart = ChartFactory.createRingChart("2010上半年销售记录", // 图表标题
                dataset, // 数据集
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 图表
        RingPlot ringPlot = (RingPlot) chart.getPlot();
        ringPlot.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        ringPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
                "{0}:{1}"));

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 设置字体
        RingPlot ringPlot = (RingPlot) chart.getPlot();
        //设置环形深度
        ringPlot.setSectionDepth(0.7);
        updateFont(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));

    }

    public static void main(String[] args) {
        RingDeom3 demo = new RingDeom3("环形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }

实例279  分离环形图
    public RingDeom4(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private PieDataset getPieDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("JAVA从入门到精通(第2版)", 500);
        dataset.setValue("视频学JAVA", 800);
        dataset.setValue("JAVA全能速查宝典", 1000);
        dataset.setValue("Java范例完全自学手册(1DVD)", 400);
        dataset.setValue("Java开发典型模块大全", 750);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        PieDataset dataset = getPieDataset();
        JFreeChart chart = ChartFactory.createRingChart("2010上半年销售记录", // 图表标题
                dataset, // 数据集
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 图表
        RingPlot ringPlot = (RingPlot) chart.getPlot();
        ringPlot.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        ringPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
                "{0}:{1}"));

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        RingPlot plot = (RingPlot) chart.getPlot();
        plot.setExplodePercent("JAVA全能速查宝典", 0.1);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 设置字体
        updateFont(chart);
        //设置图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));

    }

    public static void main(String[] args) {
        RingDeom4 demo = new RingDeom4("环形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例280  椭圆环形图
    public RingDeom5(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private PieDataset getPieDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("JAVA从入门到精通(第2版)", 500);
        dataset.setValue("视频学JAVA", 800);
        dataset.setValue("JAVA全能速查宝典", 1000);
        dataset.setValue("Java范例完全自学手册(1DVD)", 400);
        dataset.setValue("Java开发典型模块大全", 750);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        PieDataset dataset = getPieDataset();
        JFreeChart chart = ChartFactory.createRingChart("2010上半年销售记录", // 图表标题
                dataset, // 数据集
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 图表
        RingPlot ringPlot = (RingPlot) chart.getPlot();
        ringPlot.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        ringPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
                "{0}:{1}"));

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        RingPlot plot = (RingPlot) chart.getPlot();
        plot.setCircular(false);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 设置字体
        updateFont(chart);
        //设置图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));

    }

    public static void main(String[] args) {
        RingDeom5 demo = new RingDeom5("环形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }


实例281  环形的阴影偏移
    public RingDeom6(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private PieDataset getPieDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("JAVA从入门到精通(第2版)", 500);
        dataset.setValue("视频学JAVA", 800);
        dataset.setValue("JAVA全能速查宝典", 1000);
        dataset.setValue("Java范例完全自学手册(1DVD)", 400);
        dataset.setValue("Java开发典型模块大全", 750);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        PieDataset dataset = getPieDataset();
        JFreeChart chart = ChartFactory.createRingChart("2010上半年销售记录", // 图表标题
                dataset, // 数据集
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 图表
        RingPlot ringPlot = (RingPlot) chart.getPlot();
        ringPlot.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        ringPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
                "{0}:{1}"));

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        RingPlot plot = (RingPlot) chart.getPlot();
        //阴影偏移
        plot.setShadowXOffset(20);
        plot.setShadowYOffset(20);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 设置字体
        updateFont(chart);
        //设置图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));

    }

    public static void main(String[] args) {
        RingDeom6 demo = new RingDeom6("环形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }

实例282  环形的简单标签
    public RingDeom7(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private PieDataset getPieDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("JAVA从入门到精通(第2版)", 500);
        dataset.setValue("视频学JAVA", 800);
        dataset.setValue("JAVA全能速查宝典", 1000);
        dataset.setValue("Java范例完全自学手册(1DVD)", 400);
        dataset.setValue("Java开发典型模块大全", 750);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        PieDataset dataset = getPieDataset();
        JFreeChart chart = ChartFactory.createRingChart("2010上半年销售记录", // 图表标题
                dataset, // 数据集
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 图表
        RingPlot ringPlot = (RingPlot) chart.getPlot();
        ringPlot.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        ringPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
                "{0}:{1}"));
        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        RingPlot plot = (RingPlot) chart.getPlot();
        //环形的简单标签
        plot.setSimpleLabels(true);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 设置字体
        updateFont(chart);
        //设置图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));

    }

    public static void main(String[] args) {
        RingDeom7 demo = new RingDeom7("环形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }


实例283  环形的旋转角度
    public RingDeom8(String title) {
        super(title);
    }

    /**
     * 创建一个数据集
     *
     * @return
     */
    private PieDataset getPieDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("JAVA从入门到精通(第2版)", 500);
        dataset.setValue("视频学JAVA", 800);
        dataset.setValue("JAVA全能速查宝典", 1000);
        dataset.setValue("Java范例完全自学手册(1DVD)", 400);
        dataset.setValue("Java开发典型模块大全", 750);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        PieDataset dataset = getPieDataset();
        JFreeChart chart = ChartFactory.createRingChart("2010上半年销售记录", // 图表标题
                dataset, // 数据集
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );

        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 图表
        RingPlot ringPlot = (RingPlot) chart.getPlot();
        ringPlot.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        ringPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
                "{0}:{1}"));

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        //图示
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 图表
        RingPlot plot = (RingPlot) chart.getPlot();
        //环形的旋转角度
        plot.setStartAngle(20);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 设置字体
        updateFont(chart);
        //设置图表
        updatePlot(chart);
        // 把JFreeChart面板保存在窗体里
        setContentPane(new ChartPanel(chart));

    }

    public static void main(String[] args) {
        RingDeom8 demo = new RingDeom8("环形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);

    }


9.8  堆积条形图
实例284  基本堆积条形图
    public StackedBarDemo1(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createStackedBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        StackedBarDemo1 demo = new StackedBarDemo1("堆积条形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例285  横向堆积条形图
    public StackedBarDemo2(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createStackedBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.HORIZONTAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        StackedBarDemo2 demo = new StackedBarDemo2("堆积条形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例286  设置边线距离
    public StackedBarDemo3(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书";
        final String series2 = "VC图书";
        final String series3 = "VB图书";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createStackedBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        final ValueAxis rangeAxis = categoryPlot.getRangeAxis();
        //下边线距离
        //rangeAxis.setLowerMargin(1.15);
        //上边线距离
        rangeAxis.setUpperMargin(0.2);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        StackedBarDemo3 demo = new StackedBarDemo3("堆积条形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例287  分组堆积条形图
    public StackedBarDemo4(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private CategoryDataset getCategoryDataset() {

        // 行关键字
        final String series1 = "JAVA图书(含光盘)";
        final String series2 = "VC图书(含光盘)";
        final String series3 = "VB图书(含光盘)";
        final String series11 = "JAVA图书(无光盘)";
        final String series21 = "VC图书(无光盘)";
        final String series31 = "VB图书(无光盘)";
        // 列关键字
        final String category1 = "1月";
        final String category2 = "2月";
        final String category3 = "3月";
        final String category4 = "4月";
        final String category5 = "5月";
        final String category6 = "6月";

        // 创建分类数据集
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(310, series1, category1);
        dataset.addValue(489, series1, category2);
        dataset.addValue(512, series1, category3);
        dataset.addValue(589, series1, category4);
        dataset.addValue(359, series1, category5);
        dataset.addValue(402, series1, category6);
        dataset.addValue(300, series11, category1);
        dataset.addValue(469, series11, category2);
        dataset.addValue(502, series11, category3);
        dataset.addValue(569, series11, category4);
        dataset.addValue(369, series11, category5);
        dataset.addValue(412, series11, category6);
        

        dataset.addValue(501, series2, category1);
        dataset.addValue(200, series2, category2);
        dataset.addValue(308, series2, category3);
        dataset.addValue(580, series2, category4);
        dataset.addValue(418, series2, category5);
        dataset.addValue(315, series2, category6);
        dataset.addValue(511, series21, category1);
        dataset.addValue(210, series21, category2);
        dataset.addValue(318, series21, category3);
        dataset.addValue(560, series21, category4);
        dataset.addValue(408, series21, category5);
        dataset.addValue(305, series21, category6);

        dataset.addValue(480, series3, category1);
        dataset.addValue(381, series3, category2);
        dataset.addValue(264, series3, category3);
        dataset.addValue(185, series3, category4);
        dataset.addValue(209, series3, category5);
        dataset.addValue(302, series3, category6);
        dataset.addValue(470, series31, category1);
        dataset.addValue(371, series31, category2);
        dataset.addValue(254, series31, category3);
        dataset.addValue(165, series31, category4);
        dataset.addValue(219, series31, category5);
        dataset.addValue(312, series31, category6);
        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        CategoryDataset dataset = getCategoryDataset();
        JFreeChart chart = ChartFactory.createStackedBarChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));
        // 图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();

        CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
        // X轴字体
        categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis valueAxis = categoryPlot.getRangeAxis();
        // y轴字体
        valueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        CategoryPlot categoryPlot = chart.getCategoryPlot();
        //添加X轴子标签
        SubCategoryAxis domainAxis = new SubCategoryAxis("月份");
        domainAxis.addSubCategory("含光盘");
        domainAxis.addSubCategory("无光盘");
        categoryPlot.setDomainAxis(domainAxis);
        
        //分组堆积条形图渲染
        GroupedStackedBarRenderer renderer = new GroupedStackedBarRenderer();
        KeyToGroupMap map = new KeyToGroupMap("G1");
        //分为两组
        map.mapKeyToGroup("JAVA图书(含光盘)", "G1");
        map.mapKeyToGroup("VC图书(含光盘)", "G1");
        map.mapKeyToGroup("VB图书(含光盘)", "G1");

        map.mapKeyToGroup("JAVA图书(无光盘)", "G2");
        map.mapKeyToGroup("VC图书(无光盘)", "G2");
        map.mapKeyToGroup("VB图书(无光盘)", "G2");
        renderer.setSeriesToGroupMap(map);
        categoryPlot.setRenderer(renderer);

    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        StackedBarDemo4 demo = new StackedBarDemo4("堆积条形图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


9.9  时序图
实例288  基本时序图
    public TimeSeriesDemo1(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYDataset getDataset() {

        final TimeSeries s1 = new TimeSeries("JAVA图书");
        s1.add(new Month(1, 2010), 480);
        s1.add(new Month(2, 2010), 381);
        s1.add(new Month(3, 2010), 264);
        s1.add(new Month(4, 2010), 185);
        s1.add(new Month(5, 2010), 209);
        s1.add(new Month(6, 2010), 302);

        final TimeSeries s2 = new TimeSeries("VC图书");
        s2.add(new Month(1, 2010), 315);
        s2.add(new Month(2, 2010), 418);
        s2.add(new Month(3, 2010), 580);
        s2.add(new Month(4, 2010), 308);
        s2.add(new Month(5, 2010), 200);
        s2.add(new Month(6, 2010), 501);

        final TimeSeries s3 = new TimeSeries("VB图书");
        s3.add(new Month(1, 2010), 310);
        s3.add(new Month(2, 2010), 489);
        s3.add(new Month(3, 2010), 512);
        s3.add(new Month(4, 2010), 589);
        s3.add(new Month(5, 2010), 359);
        s3.add(new Month(6, 2010), 402);

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(s1);
        dataset.addSeries(s2);
        dataset.addSeries(s3);

        return dataset;

    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createTimeSeriesChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

        // 图表
        XYPlot xyPlot = chart.getXYPlot();

        ValueAxis domainyAxis = xyPlot.getDomainAxis();
        // X轴字体
        domainyAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainyAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis rangeAxis = xyPlot.getRangeAxis();
        // y轴字体
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        TimeSeriesDemo1 demo = new TimeSeriesDemo1("时序图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

实例289  设置时间显示格式
    public TimeSeriesDemo2(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYDataset getDataset() {

        final TimeSeries s1 = new TimeSeries("JAVA图书");
        s1.add(new Month(1, 2010), 480);
        s1.add(new Month(2, 2010), 381);
        s1.add(new Month(3, 2010), 264);
        s1.add(new Month(4, 2010), 185);
        s1.add(new Month(5, 2010), 209);
        s1.add(new Month(6, 2010), 302);

        final TimeSeries s2 = new TimeSeries("VC图书");
        s2.add(new Month(1, 2010), 315);
        s2.add(new Month(2, 2010), 418);
        s2.add(new Month(3, 2010), 580);
        s2.add(new Month(4, 2010), 308);
        s2.add(new Month(5, 2010), 200);
        s2.add(new Month(6, 2010), 501);

        final TimeSeries s3 = new TimeSeries("VB图书");
        s3.add(new Month(1, 2010), 310);
        s3.add(new Month(2, 2010), 489);
        s3.add(new Month(3, 2010), 512);
        s3.add(new Month(4, 2010), 589);
        s3.add(new Month(5, 2010), 359);
        s3.add(new Month(6, 2010), 402);

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(s1);
        dataset.addSeries(s2);
        dataset.addSeries(s3);

        return dataset;

    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createTimeSeriesChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        XYPlot xyPlot = chart.getXYPlot();
        DateAxis dateAxis = (DateAxis) xyPlot.getDomainAxis();
        //设置显示格式
        dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM"));
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

        // 图表
        XYPlot xyPlot = chart.getXYPlot();

        ValueAxis domainyAxis = xyPlot.getDomainAxis();
        // X轴字体
        domainyAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainyAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis rangeAxis = xyPlot.getRangeAxis();
        // y轴字体
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        TimeSeriesDemo2 demo = new TimeSeriesDemo2("时序图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例290  添加双时间轴
    public TimeSeriesDemo3(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYDataset getDataset() {

        final TimeSeries s1 = new TimeSeries("JAVA图书");
        s1.add(new Month(1, 2010), 480);
        s1.add(new Month(2, 2010), 381);
        s1.add(new Month(3, 2010), 264);
        s1.add(new Month(4, 2010), 185);
        s1.add(new Month(5, 2010), 209);
        s1.add(new Month(6, 2010), 302);

        final TimeSeries s2 = new TimeSeries("VC图书");
        s2.add(new Month(1, 2010), 315);
        s2.add(new Month(2, 2010), 418);
        s2.add(new Month(3, 2010), 580);
        s2.add(new Month(4, 2010), 308);
        s2.add(new Month(5, 2010), 200);
        s2.add(new Month(6, 2010), 501);

        final TimeSeries s3 = new TimeSeries("VB图书");
        s3.add(new Month(1, 2010), 310);
        s3.add(new Month(2, 2010), 489);
        s3.add(new Month(3, 2010), 512);
        s3.add(new Month(4, 2010), 589);
        s3.add(new Month(5, 2010), 359);
        s3.add(new Month(6, 2010), 402);

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(s1);
        dataset.addSeries(s2);
        dataset.addSeries(s3);

        return dataset;

    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createTimeSeriesChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        XYPlot xyPlot = chart.getXYPlot();
        DateAxis dateAxis = (DateAxis) xyPlot.getDomainAxis();
        //设置显示格式
        dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM"));

        //添加时间时间轴
        DateAxis dateAxis1 = new DateAxis();
        //添加时间范围
        dateAxis1.setRange(new Month(1, 2010).getStart(), new Month(7, 2010).getEnd());
        //设置时间表格
        dateAxis1.setDateFormatOverride(new SimpleDateFormat("yyyy-MMM"));
        xyPlot.setDomainAxis(1,dateAxis1);

    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

        // 图表
        XYPlot xyPlot = chart.getXYPlot();

        ValueAxis domainyAxis = xyPlot.getDomainAxis();
        // X轴字体
        domainyAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainyAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis rangeAxis = xyPlot.getRangeAxis();
        // y轴字体
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        TimeSeriesDemo3 demo = new TimeSeriesDemo3("时序图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例291  双时间轴位置
    public TimeSeriesDemo4(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYDataset getDataset() {

        final TimeSeries s1 = new TimeSeries("JAVA图书");
        s1.add(new Month(1, 2010), 480);
        s1.add(new Month(2, 2010), 381);
        s1.add(new Month(3, 2010), 264);
        s1.add(new Month(4, 2010), 185);
        s1.add(new Month(5, 2010), 209);
        s1.add(new Month(6, 2010), 302);

        final TimeSeries s2 = new TimeSeries("VC图书");
        s2.add(new Month(1, 2010), 315);
        s2.add(new Month(2, 2010), 418);
        s2.add(new Month(3, 2010), 580);
        s2.add(new Month(4, 2010), 308);
        s2.add(new Month(5, 2010), 200);
        s2.add(new Month(6, 2010), 501);

        final TimeSeries s3 = new TimeSeries("VB图书");
        s3.add(new Month(1, 2010), 310);
        s3.add(new Month(2, 2010), 489);
        s3.add(new Month(3, 2010), 512);
        s3.add(new Month(4, 2010), 589);
        s3.add(new Month(5, 2010), 359);
        s3.add(new Month(6, 2010), 402);

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(s1);
        dataset.addSeries(s2);
        dataset.addSeries(s3);

        return dataset;

    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createTimeSeriesChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        XYPlot xyPlot = chart.getXYPlot();
        DateAxis dateAxis = (DateAxis) xyPlot.getDomainAxis();
        //设置显示格式
        dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM"));

        //添加时间轴
        DateAxis dateAxis1 = new DateAxis();
        dateAxis1.setRange(new Month(1, 2010).getStart(), new Month(7, 2010).getEnd());
        dateAxis1.setDateFormatOverride(new SimpleDateFormat("yyyy-MMM"));
        xyPlot.setDomainAxis(1,dateAxis1);
        //设置时间轴
        xyPlot.setDomainAxisLocation(1, AxisLocation.BOTTOM_OR_LEFT);

    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

        // 图表
        XYPlot xyPlot = chart.getXYPlot();

        ValueAxis domainyAxis = xyPlot.getDomainAxis();
        // X轴字体
        domainyAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainyAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis rangeAxis = xyPlot.getRangeAxis();
        // y轴字体
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        TimeSeriesDemo4 demo = new TimeSeriesDemo4("时序图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例292  动态显示十字标记
    public TimeSeriesDemo5(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYDataset getDataset() {

        final TimeSeries s1 = new TimeSeries("JAVA图书");
        s1.add(new Month(1, 2010), 480);
        s1.add(new Month(2, 2010), 381);
        s1.add(new Month(3, 2010), 264);
        s1.add(new Month(4, 2010), 185);
        s1.add(new Month(5, 2010), 209);
        s1.add(new Month(6, 2010), 302);

        final TimeSeries s2 = new TimeSeries("VC图书");
        s2.add(new Month(1, 2010), 315);
        s2.add(new Month(2, 2010), 418);
        s2.add(new Month(3, 2010), 580);
        s2.add(new Month(4, 2010), 308);
        s2.add(new Month(5, 2010), 200);
        s2.add(new Month(6, 2010), 501);

        final TimeSeries s3 = new TimeSeries("VB图书");
        s3.add(new Month(1, 2010), 310);
        s3.add(new Month(2, 2010), 489);
        s3.add(new Month(3, 2010), 512);
        s3.add(new Month(4, 2010), 589);
        s3.add(new Month(5, 2010), 359);
        s3.add(new Month(6, 2010), 402);

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(s1);
        dataset.addSeries(s2);
        dataset.addSeries(s3);

        return dataset;

    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createTimeSeriesChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        XYPlot xyPlot = chart.getXYPlot();

        // 显示十字
        xyPlot.setDomainCrosshairVisible(true);
        xyPlot.setRangeCrosshairVisible(true);

        DateAxis dateAxis = (DateAxis) xyPlot.getDomainAxis();
        // 设置显示格式
        dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MMM"));
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

        // 图表
        XYPlot xyPlot = chart.getXYPlot();

        ValueAxis domainyAxis = xyPlot.getDomainAxis();
        // X轴字体
        domainyAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainyAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis rangeAxis = xyPlot.getRangeAxis();
        // y轴字体
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        TimeSeriesDemo5 demo = new TimeSeriesDemo5("时序图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例293  添加Y轴标记
    public TimeSeriesDemo6(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYDataset getDataset() {

        final TimeSeries s1 = new TimeSeries("JAVA图书");
        s1.add(new Month(1, 2010), 480);
        s1.add(new Month(2, 2010), 381);
        s1.add(new Month(3, 2010), 264);
        s1.add(new Month(4, 2010), 185);
        s1.add(new Month(5, 2010), 209);
        s1.add(new Month(6, 2010), 302);

        final TimeSeries s2 = new TimeSeries("VC图书");
        s2.add(new Month(1, 2010), 315);
        s2.add(new Month(2, 2010), 418);
        s2.add(new Month(3, 2010), 580);
        s2.add(new Month(4, 2010), 308);
        s2.add(new Month(5, 2010), 200);
        s2.add(new Month(6, 2010), 501);

        final TimeSeries s3 = new TimeSeries("VB图书");
        s3.add(new Month(1, 2010), 310);
        s3.add(new Month(2, 2010), 489);
        s3.add(new Month(3, 2010), 512);
        s3.add(new Month(4, 2010), 589);
        s3.add(new Month(5, 2010), 359);
        s3.add(new Month(6, 2010), 402);

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(s1);
        dataset.addSeries(s2);
        dataset.addSeries(s3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createTimeSeriesChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

        // 图表
        XYPlot xyPlot = chart.getXYPlot();

        ValueAxis domainyAxis = xyPlot.getDomainAxis();
        // X轴字体
        domainyAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainyAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis rangeAxis = xyPlot.getRangeAxis();
        // y轴字体
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        XYPlot xyPlot = chart.getXYPlot();
        //添加Y轴标记
        ValueMarker marker = new ValueMarker(450.0);
        marker.setPaint(Color.orange);
        xyPlot.addRangeMarker(marker);
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        TimeSeriesDemo6 demo = new TimeSeriesDemo6("时序图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例294  添加X轴标记
    public TimeSeriesDemo7(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYDataset getDataset() {

        final TimeSeries s1 = new TimeSeries("JAVA图书");
        s1.add(new Month(1, 2010), 480);
        s1.add(new Month(2, 2010), 381);
        s1.add(new Month(3, 2010), 264);
        s1.add(new Month(4, 2010), 185);
        s1.add(new Month(5, 2010), 209);
        s1.add(new Month(6, 2010), 302);

        final TimeSeries s2 = new TimeSeries("VC图书");
        s2.add(new Month(1, 2010), 315);
        s2.add(new Month(2, 2010), 418);
        s2.add(new Month(3, 2010), 580);
        s2.add(new Month(4, 2010), 308);
        s2.add(new Month(5, 2010), 200);
        s2.add(new Month(6, 2010), 501);

        final TimeSeries s3 = new TimeSeries("VB图书");
        s3.add(new Month(1, 2010), 310);
        s3.add(new Month(2, 2010), 489);
        s3.add(new Month(3, 2010), 512);
        s3.add(new Month(4, 2010), 589);
        s3.add(new Month(5, 2010), 359);
        s3.add(new Month(6, 2010), 402);

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(s1);
        dataset.addSeries(s2);
        dataset.addSeries(s3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createTimeSeriesChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        XYPlot xyPlot = chart.getXYPlot();
        // 在X轴添加季度标记
        Quarter quarter = new Quarter(2, 2010);
        ValueMarker marker = new ValueMarker(quarter.getFirstMillisecond());
        marker.setPaint(Color.ORANGE);
        //添加标记
        xyPlot.addDomainMarker(marker);

    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

        // 图表
        XYPlot xyPlot = chart.getXYPlot();

        ValueAxis domainyAxis = xyPlot.getDomainAxis();
        // X轴字体
        domainyAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainyAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis rangeAxis = xyPlot.getRangeAxis();
        // y轴字体
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        TimeSeriesDemo7 barDemo = new TimeSeriesDemo7("时序图");
        barDemo.createPlot();
        barDemo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(barDemo);
        // 设置可以显示
        barDemo.setVisible(true);
    }


实例295  设置刻度单位
    public TimeSeriesDemo8(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYDataset getDataset() {

        final TimeSeries s1 = new TimeSeries("JAVA图书");
        s1.add(new Month(1, 2010), 480);
        s1.add(new Month(2, 2010), 381);
        s1.add(new Month(3, 2010), 264);
        s1.add(new Month(4, 2010), 185);
        s1.add(new Month(5, 2010), 209);
        s1.add(new Month(6, 2010), 302);

        final TimeSeries s2 = new TimeSeries("VC图书");
        s2.add(new Month(1, 2010), 315);
        s2.add(new Month(2, 2010), 418);
        s2.add(new Month(3, 2010), 580);
        s2.add(new Month(4, 2010), 308);
        s2.add(new Month(5, 2010), 200);
        s2.add(new Month(6, 2010), 501);

        final TimeSeries s3 = new TimeSeries("VB图书");
        s3.add(new Month(1, 2010), 310);
        s3.add(new Month(2, 2010), 489);
        s3.add(new Month(3, 2010), 512);
        s3.add(new Month(4, 2010), 589);
        s3.add(new Month(5, 2010), 359);
        s3.add(new Month(6, 2010), 402);

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(s1);
        dataset.addSeries(s2);
        dataset.addSeries(s3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createTimeSeriesChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        // 分类图表
        XYPlot xyPlot = chart.getXYPlot();
        //设置单位
        final DateAxis axis = (DateAxis) xyPlot.getDomainAxis();
        //设置刻度单位
        axis.setTickUnit(new DateTickUnit(DateTickUnitType.MONTH, 2,
                new SimpleDateFormat("yyyy-MMM")));

    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

        // 图表
        XYPlot xyPlot = chart.getXYPlot();

        ValueAxis domainyAxis = xyPlot.getDomainAxis();
        // X轴字体
        domainyAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainyAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis rangeAxis = xyPlot.getRangeAxis();
        // y轴字体
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        // 修改图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        TimeSeriesDemo8 demo = new TimeSeriesDemo8("时序图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }


实例296  设置X轴范围
    public TimeSeriesDemo9(String title) {
        super(title);
    }

    /**
     * 创建数据集
     *
     * @return
     */
    private XYDataset getDataset() {

        final TimeSeries s1 = new TimeSeries("JAVA图书");
        s1.add(new Month(1, 2010), 480);
        s1.add(new Month(2, 2010), 381);
        s1.add(new Month(3, 2010), 264);
        s1.add(new Month(4, 2010), 185);
        s1.add(new Month(5, 2010), 209);
        s1.add(new Month(6, 2010), 302);

        final TimeSeries s2 = new TimeSeries("VC图书");
        s2.add(new Month(1, 2010), 315);
        s2.add(new Month(2, 2010), 418);
        s2.add(new Month(3, 2010), 580);
        s2.add(new Month(4, 2010), 308);
        s2.add(new Month(5, 2010), 200);
        s2.add(new Month(6, 2010), 501);

        final TimeSeries s3 = new TimeSeries("VB图书");
        s3.add(new Month(1, 2010), 310);
        s3.add(new Month(2, 2010), 489);
        s3.add(new Month(3, 2010), 512);
        s3.add(new Month(4, 2010), 589);
        s3.add(new Month(5, 2010), 359);
        s3.add(new Month(6, 2010), 402);

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(s1);
        dataset.addSeries(s2);
        dataset.addSeries(s3);

        return dataset;
    }

    /**
     * 生成JFreeChart
     *
     * @return
     */
    private JFreeChart getJFreeChart() {
        XYDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createTimeSeriesChart("2010年上半年销售量", // 图表标题
                "月份", // x轴标签
                "销售量(单位:本)", // y轴标签
                dataset, // 数据集
                true, // 是否显示图例
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        return chart;
    }

    /**
     * 修改字体
     *
     * @param chart
     */
    private void updateFont(JFreeChart chart) {

        // 标题
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
        LegendTitle legendTitle = chart.getLegend();
        legendTitle.setItemFont(new Font("宋体", Font.PLAIN, 14));

        // 图表
        XYPlot xyPlot = chart.getXYPlot();

        ValueAxis domainyAxis = xyPlot.getDomainAxis();
        // X轴字体
        domainyAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // X轴标签字体
        domainyAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));

        ValueAxis rangeAxis = xyPlot.getRangeAxis();
        // y轴字体
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // y轴标签字体
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
    }

    /**
     * 更新图表显示
     *
     * @param chart
     */
    private void updatePlot(JFreeChart chart) {
        Day endDay = new Day(1,6,2010);
        SerialDate serialDate = SerialDate.addMonths(-5, endDay.getSerialDate());
        Day beginDay = new Day(serialDate.toDate());
        DateAxis axis = (DateAxis) chart.getXYPlot().getDomainAxis();
        //设置X轴开始结束位置
        axis.setRange(beginDay.getStart(), endDay.getEnd());
    }

    /**
     * 设置图表
     *
     * @param chart
     */
    public void createPlot() {
        JFreeChart chart = getJFreeChart();
        // 修改字体
        updateFont(chart);
        //更新图表
        updatePlot(chart);
        setContentPane(new ChartPanel(chart));
    }

    public static void main(String[] args) {
        TimeSeriesDemo9 demo = new TimeSeriesDemo9("时序图");
        demo.createPlot();
        demo.pack();
        // 把窗体显示到显示器中央
        RefineryUtilities.centerFrameOnScreen(demo);
        // 设置可以显示
        demo.setVisible(true);
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值