zoukankan      html  css  js  c++  java
  • JAVA Swing使用JFreeChart实现折线图绘制

    效果如下:

      

    实现步骤:

      1.导入JAR包

        

        jfreechart官网下载的zip文件中包含这两个jar包

      2.代码编写

      1 import org.jfree.chart.ChartFactory;
      2 import org.jfree.chart.ChartPanel;
      3 import org.jfree.chart.JFreeChart;
      4 import org.jfree.chart.axis.DateAxis;
      5 import org.jfree.chart.axis.DateTickUnit;
      6 import org.jfree.chart.labels.ItemLabelAnchor;
      7 import org.jfree.chart.labels.ItemLabelPosition;
      8 import org.jfree.chart.labels.StandardXYItemLabelGenerator;
      9 import org.jfree.chart.plot.XYPlot;
     10 import org.jfree.chart.renderer.xy.XYItemRenderer;
     11 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
     12 import org.jfree.chart.title.TextTitle;
     13 import org.jfree.data.time.Month;
     14 import org.jfree.data.time.TimeSeries;
     15 import org.jfree.data.time.TimeSeriesCollection;
     16 import org.jfree.ui.TextAnchor;
     17 
     18 import javax.swing.*;
     19 import java.awt.*;
     20 import java.text.SimpleDateFormat;
     21 
     22 public class TimeSeriesChart {
     23     private TimeSeriesChart() {
     24 
     25         // A网站的访问量统计
     26         TimeSeries timeSeries1 = new TimeSeries("A", Month.class);
     27         // 添加数据
     28         timeSeries1.add(new Month(1, 2016), 154);
     29         timeSeries1.add(new Month(2, 2016), 256);
     30         timeSeries1.add(new Month(3, 2016), 312);
     31         timeSeries1.add(new Month(4, 2016), 489);
     32         timeSeries1.add(new Month(5, 2016), 563);
     33         timeSeries1.add(new Month(6, 2016), 555);
     34         timeSeries1.add(new Month(7, 2016), 359);
     35         timeSeries1.add(new Month(8, 2016), 291);
     36         timeSeries1.add(new Month(9, 2016), 123);
     37         timeSeries1.add(new Month(10, 2016), 438);
     38         timeSeries1.add(new Month(11, 2016), 286);
     39 
     40         // A网站的访问量统计
     41         TimeSeries timeSeries2 = new TimeSeries("A", Month.class);
     42         // 添加数据
     43         timeSeries2.add(new Month(1, 2016), 124);
     44         timeSeries2.add(new Month(2, 2016), 326);
     45         timeSeries2.add(new Month(3, 2016), 12);
     46         timeSeries2.add(new Month(4, 2016), 567);
     47         timeSeries2.add(new Month(5, 2016), 546);
     48         timeSeries2.add(new Month(6, 2016), 123);
     49         timeSeries2.add(new Month(7, 2016), 222);
     50         timeSeries2.add(new Month(8, 2016), 545);
     51         timeSeries2.add(new Month(9, 2016), 56);
     52         timeSeries2.add(new Month(10, 2016), 543);
     53         timeSeries2.add(new Month(11, 2016), 221);
     54 
     55         // 定义时间序列的集合
     56         TimeSeriesCollection lineDataset = new TimeSeriesCollection();
     57         lineDataset.addSeries(timeSeries1);
     58         lineDataset.addSeries(timeSeries2);
     59 
     60 
     61 //         JFreeChart chart = ChartFactory.createXYStepChart("Time line graph", "M", "F", xySeriesCollection, PlotOrientation.HORIZONTAL, false, false, false);
     62         JFreeChart chart = ChartFactory.createTimeSeriesChart("Time line graph", "M", "F", lineDataset, false, false, false);
     63         //设置主标题
     64         chart.setTitle(new TextTitle("A,B网站访问量统计对比图"));
     65         //设置子标题
     66         TextTitle subtitle = new TextTitle("2016年度", new Font("宋体", Font.BOLD, 12));
     67         chart.addSubtitle(subtitle);
     68 
     69         chart.setAntiAlias(true);
     70 
     71         //设置时间轴的范围。
     72         XYPlot plot = (XYPlot) chart.getPlot();
     73         DateAxis dateaxis = (DateAxis) plot.getDomainAxis();
     74         dateaxis.setDateFormatOverride(new SimpleDateFormat("M"));
     75         dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 1));
     76 
     77         //设置曲线是否显示数据点
     78         XYLineAndShapeRenderer xylinerenderer = (XYLineAndShapeRenderer) plot.getRenderer();
     79         xylinerenderer.setBaseShapesVisible(true);
     80 
     81         //设置曲线显示各数据点的值
     82         XYItemRenderer xyitem = plot.getRenderer();
     83         xyitem.setBaseItemLabelsVisible(true);
     84         xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
     85         xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
     86         xyitem.setBaseItemLabelFont(new Font("Dialog", Font.BOLD, 12));
     87         plot.setRenderer(xyitem);
     88 
     89         JPanel jPanel = new ChartPanel(chart);
     90 
     91 
     92         JFrame frame = new JFrame("JFreechart Test");
     93         frame.add(jPanel);
     94         frame.setBounds(0, 0, 800, 600);
     95         frame.setVisible(true);
     96     }
     97 
     98     public static void main(String[] args) {
     99         TimeSeriesChart timeSeriesChart = new TimeSeriesChart();
    100     }
    101 }
  • 相关阅读:
    SQL Sever 各版本下载
    使用REPLACE更新某表中某个字段详细内容【SQL语句】
    常用css简写
    CSS hack:区分IE6,IE7,IE8,firefox
    浅析vue中的provide / inject 有什么用处
    Git常用命令总结
    ts
    学会使用Vue JSX,一车老干妈都是你的
    关于javascript的Object. hasOwnProperty,看我就够了
    JavaScript进阶笔记(七):异步任务和事件循环
  • 原文地址:https://www.cnblogs.com/adversary/p/6681776.html
Copyright © 2011-2022 走看看