zoukankan      html  css  js  c++  java
  • JFreeChat学习曲线图的创建

     备注:导包

     1 import java.awt.Color;
     2 import java.awt.Font;
     3 import java.io.IOException;
     4 
     5 import javax.servlet.ServletException;
     6 import javax.servlet.ServletRequest;
     7 import javax.servlet.ServletResponse;
     8 import javax.servlet.http.HttpServlet;
     9 
    10 import org.jfree.chart.ChartFactory;
    11 import org.jfree.chart.ChartUtilities;
    12 import org.jfree.chart.JFreeChart;
    13 import org.jfree.chart.labels.ItemLabelAnchor;
    14 import org.jfree.chart.labels.ItemLabelPosition;
    15 import org.jfree.chart.labels.StandardXYItemLabelGenerator;
    16 import org.jfree.chart.plot.XYPlot;
    17 import org.jfree.chart.renderer.xy.XYItemRenderer;
    18 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    19 import org.jfree.chart.title.LegendTitle;
    20 import org.jfree.chart.title.TextTitle;
    21 import org.jfree.data.time.Month;
    22 import org.jfree.data.time.TimeSeries;
    23 import org.jfree.data.time.TimeSeriesCollection;
    24 import org.jfree.ui.RectangleInsets;
    25 import org.jfree.ui.TextAnchor;

    第一步:一样准备数据:

    public static TimeSeries getTimeSeriesBy2013(){
      //访问量统计时间线:
        TimeSeries timeSeries = new TimeSeries("2013年度",Month.class);
        //构造数据集合
        timeSeries.add(new Month(1,2013),11200);
        timeSeries.add(new Month(2, 2013), 9000);
        timeSeries.add(new Month(3, 2013), 6200);
        timeSeries.add(new Month(4, 2013), 8200);
        timeSeries.add(new Month(5, 2013), 8200);
        timeSeries.add(new Month(6, 2013), 12200);
        timeSeries.add(new Month(7, 2013), 13200);
        timeSeries.add(new Month(8, 2013), 8300);
        timeSeries.add(new Month(9, 2013), 12400);
        timeSeries.add(new Month(10, 2013), 12500);
        timeSeries.add(new Month(11, 2013), 13600);
        timeSeries.add(new Month(12, 2013), 12500);
        return timeSeries;
       }
       
       public static TimeSeries getTimeSeriesBy2012(){
        TimeSeries timeSeries = new TimeSeries("2012年度",Month.class);
        timeSeries.add(new Month(1, 2013), 7200);
        timeSeries.add(new Month(2, 2013), 7000);
        timeSeries.add(new Month(3, 2013), 4200);
        timeSeries.add(new Month(4, 2013), 8200);
        timeSeries.add(new Month(5, 2013), 7300);
        timeSeries.add(new Month(6, 2013), 8200);
        timeSeries.add(new Month(7, 2013), 9200);
        timeSeries.add(new Month(8, 2013), 7300);
        timeSeries.add(new Month(9, 2013), 9400);
        timeSeries.add(new Month(10, 2013), 7500);
        timeSeries.add(new Month(11, 2013), 6600);
        timeSeries.add(new Month(12, 2013), 3500);
        return timeSeries;
       }
    

     
    第二步:构造曲线数据集合

    1 //访问量统计时间线:(两个季度)
    2     TimeSeries timeSeries2013 = this.getTimeSeriesBy2013();
    3     TimeSeries timeSeries2012 = this.getTimeSeriesBy2012();
    4     
    5     //时间曲线数据集合
    6     TimeSeriesCollection lineDataset = new TimeSeriesCollection();
    7     //把上面的时间线添加到数据集合之中
    8     lineDataset.addSeries(timeSeries2012);
    9     lineDataset.addSeries(timeSeries2013);

    第三步 开始画线

    1 //开始进行画线
    2     JFreeChart chart = ChartFactory.createTimeSeriesChart(
    3       "访问量统计时间线", 
    4       "月份", 
    5       "访问量", 
    6       lineDataset, 
    7       true, true, true)

    第四步 设置样式,同时解决 口口 问题

    4.1 X,Y轴标题 口口问题

    1  XYPlot plot = chart.getXYPlot();
    2     Font fn = new Font("黑体", Font.BOLD, 12);
    3     plot.getDomainAxis().setLabelFont(fn);
    4     plot.getRangeAxis().setLabelFont(fn);

    4.2 样式设计

     1 //设置网格背景颜色
     2     plot.setBackgroundPaint(Color.white);
     3 
     4 
     5     //设置网格竖线颜色
     6     plot.setDomainGridlinePaint(Color.pink);
     7 
     8 
     9     //设置网格横线颜色
    10     plot.setRangeGridlinePaint(Color.pink);
    11 
    12 
    13     //设置曲线图与 xy 轴的距离
    14     plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
    15 
    16 
    17     //设置曲线是否显示数据点
    18     XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
    19     xylineandshaperenderer.setBaseShapesVisible(true);
    20 
    21 
    22     //设置曲线显示各数据点的值
    23     XYItemRenderer xyitem = plot.getRenderer();
    24     xyitem.setBaseItemLabelsVisible(true);
    25     xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition
    26       (ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
    27     xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
    28     xyitem.setBaseItemLabelFont(new Font("黑体", 1, 14));
    29     plot.setRenderer(xyitem);
    30 
    31 
    32 
    33  //设置子标题
    34     TextTitle subtitle = new TextTitle("2013 / 2012年度", new Font("黑体", Font.BOLD, 12));
    35     chart.addSubtitle(subtitle);
    36 
    37 
    38     //设置主标题
    39     chart.setTitle(new TextTitle("blog 访问量统计", new Font("隶书", Font.ITALIC, 15)));
    40     chart.setAntiAlias(true);
    41     
    42   // 为图例说明设置字体
    43     Font LegendFont = new Font("楷体", Font.PLAIN, 18); 
    44       LegendTitle legend = chart.getLegend(0); 
    45        legend.setItemFont(LegendFont);

    最后:发送到前台JSP:

    1 res.setContentType("image/jpeg");// 将输出设置为image/jepg格式
    2 ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 1.0f, chart, 
    3                  800, 450, null);// 输出图表 

    上图:

  • 相关阅读:
    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
    11
    实战 迁移学习 VGG19、ResNet50、InceptionV3 实践 猫狗大战 问题
    tx2系统备份与恢复
    如何在Ubuntu 18.04上安装和卸载TeamViewer
    bzoj 3732 Network (kruskal重构树)
    bzoj2152 聪聪可可 (树形dp)
    牛客 216D 消消乐 (二分图最小点覆盖)
    牛客 197E 01串
    Wannafly挑战赛23
  • 原文地址:https://www.cnblogs.com/liuhuapiaoyuan/p/3113478.html
Copyright © 2011-2022 走看看