Java jfreechart 中显示多个不同类型图表

本来想在同一个freechart中画出不同类型的图表。比如说一个是XYAreaRender一个是XYLinerender.

本例参考例程http://www.java2s.com/Code/Java/Chart/JFreeChartOverlaidXYPlotDemo.htm

实现效果如图:


代码如下:

 private JFreeChart createChart() {
       
        // create plot 1 
	//创建XYarea数据,新建XYAreaRenderer实例,并添加至XYplot
        final XYDataset  data1 = createAreaDataset();
        final XYItemRenderer AreaRenderer = new XYAreaRenderer();
        AreaRenderer.setBaseToolTipGenerator(
            new StandardXYToolTipGenerator(
                StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                new DecimalFormat("##0"), new DecimalFormat("#,##0.00")
            )
        );
	// areadomainAxis指的是横坐标,areaRangeAxis指的是纵坐标。
        final ValueAxis areaDomainAxis = new NumberAxis("same x axis");
        final ValueAxis areaRangeAxis = new NumberAxis("axis 1");
        areaDomainAxis.setLowerMargin(0.0);
        areaDomainAxis.setUpperMargin(0.0);
        final XYPlot plot = new XYPlot(data1, areaDomainAxis, areaRangeAxis, AreaRenderer);
        
        // insert a text 
        final double x = new Day(9, SerialDate.MARCH, 2002).getMiddleMillisecond();
        final XYTextAnnotation annotation = new XYTextAnnotation("Hello!", x, 10000.0);
        annotation.setFont(new Font("SansSerif", Font.PLAIN, 9));
        plot.addAnnotation(annotation);

        // add a second XYlineRenderer...
	// 创建XYline数据,设置坐标,setAutoRange指的是,坐标轴2自动调整范围与坐标轴一分开。
        final XYDataset TransferKey = createTransferDataset();
	// 将dataset指给xyplot,index编号为1
        plot.setDataset(1, TransferKey);
        final ValueAxis TransferRangeAxis = new NumberAxis("axis 2");
        TransferRangeAxis.setAutoRange(true);
	//将新建的坐标轴属性指给index为1的坐标轴,即本例的右侧坐标轴,设置位置。
        plot.setRangeAxis(1,TransferRangeAxis);
        plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);
	//新建XYRenderer,并一同加入同一个xyplot,注意SetRender时的坐标轴编号。
        final XYItemRenderer Linerenderer = new StandardXYItemRenderer();
        Linerenderer.setBaseToolTipGenerator(
            new StandardXYToolTipGenerator(
                StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                new DecimalFormat("##0"), new DecimalFormat("0.00")
            )
        );
        
        plot.setRenderer(1, Linerenderer);
	//这句指的是将index为1 的数据指定给index为1的坐标轴。如果没有这句的话,第二个数据的坐标将按第一个坐标轴进行画图。
        plot.mapDatasetToRangeAxis(1, 1);
        
        plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

        // return a new chart containing the overlaid plot...
        return new JFreeChart("Transfer Func", JFreeChart.DEFAULT_TITLE_FONT, plot, false);
    }
    
    /**
     * Creates a sample dataset.
     *
     * @return The dataset.
     */
    private XYDataset createAreaDataset() {

        // create dataset 1...
        final XYSeries AreaSeries = new XYSeries("AreaData");
        double value;
        for(int i=0;i<256;i++){
            value = 10*Math.random();
            AreaSeries.add(i, value);
        }
            
        return new XYSeriesCollection(AreaSeries);

    }

    // ****************************************************************************
    // * JFREECHART DEVELOPER GUIDE                                               *
    // * The JFreeChart Developer Guide, written by David Gilbert, is available   *
    // * to purchase from Object Refinery Limited:                                *
    // *                                                                          *
    // * http://www.object-refinery.com/jfreechart/guide.html                     *
    // *                                                                          *
    // * Sales are used to provide funding for the JFreeChart project - please    * 
    // * support us so that we can continue developing free software.             *
    // ****************************************************************************
    
    /**
     * Creates a sample dataset.
     *
     * @return The dataset.
     */
    private XYDataset createTransferDataset() {

        // create createTransferDataset...
         final XYSeries TransferSeries = new XYSeries("AreaData");
       // double value;
        TransferSeries.add(0,0);
        TransferSeries.add(255,1);
        
        return new XYSeriesCollection(TransferSeries);

    }
    
    private void moveBtnActionPerformed(ActionEvent evt) {                                        
        // TODO add your handling code here:
         /*
         * 
         */
   //     super(title);


        final JFreeChart chart = createChart();
	//以下是将jfreechart指给特定JPanel空间进行显示。注意最后三句必不可少。一定要设置JPanel的Layout为BorderLayout()
        final ChartPanel chartPanel = new ChartPanel(chart);
        FreeChartpanel.setLayout(new java.awt.BorderLayout());
        FreeChartpanel.add(chartPanel,BorderLayout.CENTER);
        FreeChartpanel.validate();
        
        /*
         * 
         */
    }                                       

以上内容有部分参考和自己思考。希望对大家有所帮助哦~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值