Jfreechart 小记

来源:互联网 发布:云计算的机遇和挑战 编辑:程序博客网 时间:2024/05/16 16:11


package org.jfree.chart.line;
import java.awt.Color;

import javax.swing.JPanel;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.axis.SymbolAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.renderer.xy.XYSplineRenderer;
import org.jfree.data.RangeType;
import org.jfree.data.time.Minute;
import org.jfree.data.time.RegularTimePeriod;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;

/**
 * 
 * A demo showing a line chart drawn using spline curves.
 */
public class TemperatureChart extends ApplicationFrame {

    private static float[] TemperatureData;
    private static float nodata;
    /**
     * Creates a new instance of the demo application.
     *
     * @param title  the frame title.
     */
    public TemperatureChart(String title,float[] temperature,float nodata) {
        super(title);
        this.TemperatureData = temperature;
        this.nodata = nodata;
        JPanel content = createDemoPanel();
        content.setPreferredSize(new java.awt.Dimension(300, 500));
        getContentPane().add(content);
    }

    /**
     * Creates a panel for the demo (used by SuperDemo.java).
     *
     * @return A panel.
     */
    public static JPanel createDemoPanel() {
        
        //轴线数值为给定数值
            SymbolAxis ySymbolAxis1 = new SymbolAxis("hPa", new String[] {
                "1000", "950", "920", "850", "780", "700", "620", "500", "400", "300",
                "250", "200", "150", "100", "70", "50", "30", "20", "10", "5"
            });
        //给定数值的索引起始数值 0,1,2,3......
            ySymbolAxis1.setUpperMargin(0.0D);
        // create plot...
            NumberAxis xAxis = new NumberAxis("K");
            xAxis.setAutoRangeIncludesZero(false);
        /*
         *
             NumberAxis yAxis = new NumberAxis("hPa");
             //数值反转
             yAxis.setInverted(true);
             yAxis.setRangeAboutValue(100, 1);
             */
    //         自定义轴线数值
             /*
             yAxis.setAutoTickUnitSelection(false);
             double unit=50d;//刻度的长度
             NumberTickUnit ntu= new NumberTickUnit(unit);
             yAxis .setTickUnit(ntu);
             yAxis.setTickLabelPaint(Color.blue);
            XYSplineRenderer renderer1 = new XYSplineRenderer();
 */
            //设置线条样式
              XYLineAndShapeRenderer renderer1 =  new XYLineAndShapeRenderer(true, true);
              //打好地基 plot:地基情节
              XYPlot plot = new XYPlot(createTemperatureDataset(), ySymbolAxis1, xAxis, renderer1);
              plot.setDomainPannable(true);
              //添加第轴线
              NumberAxis numberaxis1 = new NumberAxis("湿度");
              //注意轴线给定索引 以便数值找到要标准轴线
              plot.setRangeAxis(10, numberaxis1);
              //调整轴线位置
              plot.setRangeAxisLocation(1, AxisLocation.TOP_OR_LEFT);
            
            XYDataset xydataset1 = createHumidityDataset();
            //数据 标记索引
            plot.setDataset(10, xydataset1);
    //        plot.mapDatasetToDomainAxis(10, 10);
            //将数值dataset 与 相应的坐标绑定。 索引
            plot.mapDatasetToRangeAxis(10, 10);
    //        plot.setRenderer(10, new XYSplineRenderer());
            //创建线条样式
            plot.setRenderer(10,new XYLineAndShapeRenderer(true, true));
            
            
            //美化界面
            plot.setBackgroundPaint(Color.lightGray);
            plot.setDomainGridlinePaint(Color.white);
            plot.setRangeGridlinePaint(Color.white);
            plot.setAxisOffset(new RectangleInsets(4, 4, 4, 4));
            
            //图 横或纵
            plot.setOrientation(PlotOrientation.HORIZONTAL);
            JFreeChart chart = new JFreeChart("MODIS",
                    JFreeChart.DEFAULT_TITLE_FONT, plot, true);
            
          
            // create and return the chart panel...
    
            ChartUtilities.applyCurrentTheme(chart);
            ChartPanel chartPanel = new ChartPanel(chart, false);
            return chartPanel;
    }
    /**
     * 索引 使其一一对应
     * @return
     */
    private static XYDataset createTemperatureDataset()
    {
        XYSeries xyseries = new XYSeries("温度");
        
        if(TemperatureData[0]  != nodata){
            xyseries.add(19,TemperatureData[0]);
        }
        if(TemperatureData[1]  != nodata){
            xyseries.add(18,TemperatureData[1]);
        }
        if(TemperatureData[2]  != nodata){    
            xyseries.add(17,TemperatureData[2]);
        }
        if(TemperatureData[3]  != nodata){    
            
            xyseries.add(16,TemperatureData[3]);
        }
        if(TemperatureData[4]  != nodata){    

            xyseries.add(15,TemperatureData[4]);
        }
        if(TemperatureData[5]  != nodata){    
        
            xyseries.add(14,TemperatureData[5]);
        }
        if(TemperatureData[6]  != nodata){    
            xyseries.add(13,TemperatureData[6]);
        }
        if(TemperatureData[7]  != nodata){    
            xyseries.add(12,TemperatureData[7]);
        }
        if(TemperatureData[8]  != nodata){    
            xyseries.add(11,TemperatureData[8]);
        }
        if(TemperatureData[9]  != nodata){    
            xyseries.add(10,TemperatureData[9]);
        }
        
        if(TemperatureData[10]  != nodata){    
            xyseries.add(9,TemperatureData[10]);
        }
        if(TemperatureData[11]  != nodata){    
            xyseries.add(8,TemperatureData[11]);
        }
        if(TemperatureData[12]  != nodata){    
            xyseries.add(7,TemperatureData[12]);
        }
        if(TemperatureData[13]  != nodata){    
            xyseries.add(6,TemperatureData[13]);
        }
        if(TemperatureData[14]  != nodata){    
            xyseries.add(5,TemperatureData[14]);
        }
        
        if(TemperatureData[15]  != nodata){    
            xyseries.add(4,TemperatureData[15]);
        }
        if(TemperatureData[16]  != nodata){    
            xyseries.add(3,TemperatureData[16]);
        }
        if(TemperatureData[17]  != nodata){    
            xyseries.add(2,TemperatureData[17]);
        }
        if(TemperatureData[18]  != nodata){    
            xyseries.add(1,TemperatureData[18]);
        }
        if(TemperatureData[19]  != nodata){    
            xyseries.add(0,TemperatureData[19]);
    }
        XYSeriesCollection xyseriescollection = new XYSeriesCollection();
        xyseriescollection.addSeries(xyseries);
        return xyseriescollection;
    }
     /**
     *索引 使其一一对应 数据暂时未读 假数据代替
     * 同数据
     * @return
     */
    private static XYDataset createHumidityDataset()
    {
      XYSeries xyseries = new XYSeries("湿度");
      xyseries.add(0, 800);
      xyseries.add(1, 900);
      xyseries.add(2, 700);
      xyseries.add(3, 800);
      xyseries.add(4, 600);
      xyseries.add(5, 300);
      xyseries.add(6, 200);
      xyseries.add(7, 100);
      xyseries.add(8, 40);
      xyseries.add(9, 10);
      XYSeriesCollection xyseriescollection = new XYSeriesCollection();
      xyseriescollection.addSeries(xyseries);
      return xyseriescollection;
    }
    /**
     * float[] to new String[]
     * @return
     */
    private static String[] getXData(){
        String[] xAxis = new String[TemperatureData.length];
        for(int i=0;i<xAxis.length;i++){
            if(TemperatureData[i] == nodata){
                xAxis[i] = "";//String.valueOf(TemperatureData[i]);
            }else{
                xAxis[i] = String.valueOf(TemperatureData[i]);
            }
        }
        String[] x = new String[] {
                xAxis[0],xAxis[1],xAxis[2],xAxis[3],xAxis[4],xAxis[5],xAxis[6],xAxis[7],xAxis[8],xAxis[9],
                xAxis[10],xAxis[11],xAxis[12],xAxis[13],xAxis[14],xAxis[15],xAxis[16],xAxis[17],xAxis[18],xAxis[19]
            };
        return x;
    }
    /**
     * Creates and returns a sample dataset.  The data was randomly
     * generated.
     *
     * @return a sample dataset.
     */
    private static XYDataset createSampleData() {
        XYSeries series = new XYSeries("温度");
//            5, 10, 20, 30, 50, 70, 100, 150, 200, 250, 300, 400, 500, 620, 700, 780, 850, 920, 950, 1000 hPa
            //值不全为空时执行
                
            if(TemperatureData[0]  != nodata){
                series.add(5,TemperatureData[0]);
            }
            if(TemperatureData[1]  != nodata){
                series.add(10,TemperatureData[1]);
            }
            if(TemperatureData[2]  != nodata){    
                series.add(20,TemperatureData[2]);
            }
            if(TemperatureData[3]  != nodata){    
                
                series.add(30,TemperatureData[3]);
            }
            if(TemperatureData[4]  != nodata){    

                series.add(50,TemperatureData[4]);
            }
            if(TemperatureData[5]  != nodata){    
            
                series.add(70,TemperatureData[5]);
            }
            if(TemperatureData[6]  != nodata){    
                series.add(100,TemperatureData[6]);
            }
            if(TemperatureData[7]  != nodata){    
                series.add(150,TemperatureData[7]);
            }
            if(TemperatureData[8]  != nodata){    
                series.add(200,TemperatureData[8]);
            }
            if(TemperatureData[9]  != nodata){    
                series.add(250,TemperatureData[9]);
            }
            
            if(TemperatureData[10]  != nodata){    
                series.add(300,TemperatureData[10]);
            }
            if(TemperatureData[11]  != nodata){    
                series.add(400,TemperatureData[11]);
            }
            if(TemperatureData[12]  != nodata){    
                series.add(500,TemperatureData[12]);
            }
            if(TemperatureData[13]  != nodata){    
                series.add(620,TemperatureData[13]);
            }
            if(TemperatureData[14]  != nodata){    
                series.add(700,TemperatureData[14]);
            }
            
            if(TemperatureData[15]  != nodata){    
                series.add(780,TemperatureData[15]);
            }
            if(TemperatureData[16]  != nodata){    
                series.add(850,TemperatureData[16]);
            }
            if(TemperatureData[17]  != nodata){    
                series.add(920,TemperatureData[17]);
            }
            if(TemperatureData[18]  != nodata){    
                series.add(950,TemperatureData[18]);
            }
            if(TemperatureData[19]  != nodata){    
                series.add(1000,TemperatureData[19]);
        }
        XYSeriesCollection result = new XYSeriesCollection(series);
        return result;
    }
    /**
     * The starting point for the regression demo.
     *
     * @param args  ignored.
     */
    public static void main(String args[]) {
//        TemperatureChart appFrame = new TemperatureChart("JFreeChart: TemperatureChart.java",null,null);
//        appFrame.pack();
//        RefineryUtilities.centerFrameOnScreen(appFrame);
//        appFrame.setVisible(true);
    }

}



原创粉丝点击