• JFreeChart在制作折线图


    JFreeChart在制作折线图的时候可以使用两种不同的方式

    package Line;
    
    import java.awt.Color;
    import java.awt.Font;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartFrame;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.StandardChartTheme;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
    
    public class Line {
      public static void main(String[] args) {
        StandardChartTheme mChartTheme = new StandardChartTheme("CN");
        mChartTheme.setLargeFont(new Font("黑体", Font.BOLD, 20));
        mChartTheme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 15));
        mChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15));
        ChartFactory.setChartTheme(mChartTheme);		
        CategoryDataset mDataset = GetDataset();
        JFreeChart mChart = ChartFactory.createLineChart(
            "折线图",//图名字
            "年份",//横坐标
            "数量",//纵坐标
            mDataset,//数据集
            PlotOrientation.VERTICAL,
            true, // 显示图例
            true, // 采用标准生成器 
            false);// 是否生成超链接
        
        CategoryPlot mPlot = (CategoryPlot)mChart.getPlot();
        mPlot.setBackgroundPaint(Color.LIGHT_GRAY);
        mPlot.setRangeGridlinePaint(Color.BLUE);//背景底部横虚线
        mPlot.setOutlinePaint(Color.RED);//边界线
        
        ChartFrame mChartFrame = new ChartFrame("折线图", mChart);
        mChartFrame.pack();
        mChartFrame.setVisible(true);
    
      }
      public static CategoryDataset GetDataset()
      {
        DefaultCategoryDataset mDataset = new DefaultCategoryDataset();
        mDataset.addValue(1, "First", "2013");
        mDataset.addValue(3, "First", "2014");
        mDataset.addValue(2, "First", "2015");
        mDataset.addValue(6, "First", "2016");
        mDataset.addValue(5, "First", "2017");
        mDataset.addValue(12, "First", "2018");
        mDataset.addValue(14, "Second", "2013");
        mDataset.addValue(13, "Second", "2014");
        mDataset.addValue(12, "Second", "2015");
        mDataset.addValue(9, "Second", "2016");
        mDataset.addValue(5, "Second", "2017");
        mDataset.addValue(7, "Second", "2018");
        return mDataset;
      }
    
    
    }


    第二种方式:

    package Line;
    
    import java.awt.Font;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartFrame;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.StandardChartTheme;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
    
    public class XYLine {
      public static void main(String[] args) {
        StandardChartTheme mChartTheme = new StandardChartTheme("CN");
        mChartTheme.setLargeFont(new Font("黑体", Font.BOLD, 20));
        mChartTheme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 15));
        mChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15));
        ChartFactory.setChartTheme(mChartTheme);		
        XYSeriesCollection mCollection = GetCollection();
        JFreeChart mChart = ChartFactory.createXYLineChart(
            "折线图",
            "X",
            "Y",				
            mCollection,
            PlotOrientation.VERTICAL,
            true, 
            true, 
            false);
        ChartFrame mChartFrame = new ChartFrame("折线图", mChart);
        mChartFrame.pack();
        mChartFrame.setVisible(true);
    
      }	
      public static XYSeriesCollection GetCollection()
      {
        XYSeriesCollection mCollection = new XYSeriesCollection();
        XYSeries mSeriesFirst = new XYSeries("First");
        mSeriesFirst.add(1.0D, 1.0D);
          mSeriesFirst.add(2D, 4D);
          mSeriesFirst.add(3D, 3D);
          mSeriesFirst.add(4D, 5D);
          mSeriesFirst.add(5D, 5D);
          mSeriesFirst.add(6D, 7D);
          mSeriesFirst.add(7D, 7D);
          mSeriesFirst.add(8D, 8D);
          XYSeries mSeriesSecond = new XYSeries("Second");
          mSeriesSecond.add(1.0D, 5D);
          mSeriesSecond.add(2D, 7D);
          mSeriesSecond.add(3D, 6D);
          mSeriesSecond.add(4D, 8D);
          mSeriesSecond.add(5D, 4D);
          mSeriesSecond.add(6D, 4D);
          mSeriesSecond.add(7D, 2D);
          mSeriesSecond.add(8D, 1.0D);
        mCollection.addSeries(mSeriesFirst);
        mCollection.addSeries(mSeriesSecond);
        return mCollection;
      }
    
    }


    1.   String sql = "select count(id) num, DATE_FORMAT(calltime, '%Y年%m月') ym,modulename mn from  tongji t group by DATE_FORMAT(calltime, '%Y年%m月'),mn";  
    2.         List list = getList(sql);  
    3.         // 绘图数据集  
    4.         DefaultCategoryDataset dataSet = new DefaultCategoryDataset();  
    5.         for (Object obj : list) {  
    6.             Map<String, Object> map = (Map) obj;  
    7.             dataSet.setValue((Long) map.get("num"), (String) map.get("mn"), map.get("ym").toString());  
    8.         }  
    9.         //如果把createLineChart改为createLineChart3D就变为了3D效果的折线图       
    10.         JFreeChart  chart = ChartFactory.createLineChart("图表标题", "X轴标题", "Y轴标题", dataSet,  
    11.                 PlotOrientation.VERTICAL, // 绘制方向  
    12.                 true, // 显示图例  
    13.                 true, // 采用标准生成器  
    14.                 false // 是否生成超链接  
    15.                 );  
    16.         chart.getTitle().setFont(titleFont); // 设置标题字体  
    17.         chart.getLegend().setItemFont(font);// 设置图例类别字体  
    18.         chart.setBackgroundPaint(bgColor);// 设置背景色   
    19.         //获取绘图区对象  
    20.         CategoryPlot plot = chart.getCategoryPlot();  
    21.         plot.setBackgroundPaint(Color.LIGHT_GRAY); // 设置绘图区背景色  
    22.         plot.setRangeGridlinePaint(Color.WHITE); // 设置水平方向背景线颜色  
    23.         plot.setRangeGridlinesVisible(true);// 设置是否显示水平方向背景线,默认值为true  
    24.         plot.setDomainGridlinePaint(Color.WHITE); // 设置垂直方向背景线颜色  
    25.         plot.setDomainGridlinesVisible(true); // 设置是否显示垂直方向背景线,默认值为false  
    26.           
    27.           
    28.         CategoryAxis domainAxis = plot.getDomainAxis();     
    29.         domainAxis.setLabelFont(font); // 设置横轴字体  
    30.         domainAxis.setTickLabelFont(font);// 设置坐标轴标尺值字体  
    31.         domainAxis.setLowerMargin(0.01);// 左边距 边框距离  
    32.         domainAxis.setUpperMargin(0.06);// 右边距 边框距离,防止最后边的一个数据靠近了坐标轴。  
    33.         domainAxis.setMaximumCategoryLabelLines(2);  
    34.           
    35.         ValueAxis rangeAxis = plot.getRangeAxis();  
    36.         rangeAxis.setLabelFont(font);   
    37.         rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());//Y轴显示整数  
    38.         rangeAxis.setAutoRangeMinimumSize(1);   //最小跨度  
    39.         rangeAxis.setUpperMargin(0.18);//上边距,防止最大的一个数据靠近了坐标轴。     
    40.         rangeAxis.setLowerBound(0);   //最小值显示0  
    41.         rangeAxis.setAutoRange(false);   //不自动分配Y轴数据  
    42.         rangeAxis.setTickMarkStroke(new BasicStroke(1.6f));     // 设置坐标标记大小  
    43.         rangeAxis.setTickMarkPaint(Color.BLACK);     // 设置坐标标记颜色  
    44.   
    45.           
    46.           
    47.      // 获取折线对象  
    48.         LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();  
    49.         BasicStroke realLine = new BasicStroke(1.8f); // 设置实线  
    50.         // 设置虚线  
    51.         float dashes[] = { 5.0f };   
    52.         BasicStroke brokenLine = new BasicStroke(2.2f, // 线条粗细  
    53.                 BasicStroke.CAP_ROUND, // 端点风格  
    54.                 BasicStroke.JOIN_ROUND, // 折点风格  
    55.                 8f, dashes, 0.6f);   
    56.         for (int i = 0; i < dataSet.getRowCount(); i++) {  
    57.             if (i % 2 == 0)  
    58.                 renderer.setSeriesStroke(i, realLine); // 利用实线绘制  
    59.             else  
    60.                 renderer.setSeriesStroke(i, brokenLine); // 利用虚线绘制  
    61.         }  
    62.           
    63.         plot.setNoDataMessage("无对应的数据,请重新查询。");  
    64.         plot.setNoDataMessageFont(titleFont);//字体的大小  
    65.         plot.setNoDataMessagePaint(Color.RED);//字体颜色  

     平面折线图效果

    3D折线图效果:

    设置线条、数据点颜色和显示属性

    CategoryPlot mPlot = (CategoryPlot)mChart.getPlot();
    mPlot.setBackgroundPaint(Color.WHITE);// 设置绘图区背景色
    mPlot.setRangeGridlinePaint(Color.BLUE);//背景底部横虚线
    mPlot.setOutlinePaint(Color.RED);//边界线
    mPlot.setDomainGridlinePaint(Color.BLUE); // 设置垂直方向背景线颜色
    mPlot.setDomainGridlinesVisible(true); // 设置是否显示垂直方向背景线,默认值为false

    LineAndShapeRenderer lasp = (LineAndShapeRenderer) mPlot.getRenderer();// 获取显示线条的对象
    lasp.setBaseShapesVisible(true);// 设置拐点是否可见/是否显示拐点
    lasp.setDrawOutlines(true);// 设置拐点不同用不同的形状
    lasp.setUseFillPaint(true);// 设置线条是否被显示填充颜色
    lasp.setBaseFillPaint(Color.BLACK);//// 设置拐点颜色
    //lasp.setSeriesPaint(series, paint);

  • 相关阅读:
    Find the Longest Word in a String
    Check for Palindromes
    Factorialize a Number
    Reverse a String
    Java中的线程概念
    websocket 实现实时消息推送
    linux安装tomcat, jdk出现的问题
    JSON, list, 前台显示
    数据库NULL和 ‘’ 区别
    js获取后台json数据显示在jsp页面元素
  • 原文地址:https://www.cnblogs.com/bnuvincent/p/4907446.html
Copyright © 2020-2023  润新知