zoukankan      html  css  js  c++  java
  • jfreechart简单介绍---曲线图

    本节主要是用jfreechart包中自带的gui相关的类,实现曲线图GUI的简单效果。

    preparation

    class

    ApplicationFrame类:

    RefineryUtilities类:

    ChartPanel类:

    method

    setContentPane()

    由于网络原因,用到的类和方法的详细介绍,在后面补充上。

    start

    曲线图
    package line;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.title.TextTitle;
    import org.jfree.data.time.TimeSeries;
    import org.jfree.data.time.Month;
    import org.jfree.data.time.TimeSeriesCollection;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    import java.awt.Color;
    import org.jfree.ui.RectangleInsets;
    import java.awt.Font;
    import org.jfree.chart.renderer.xy.XYItemRenderer;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.labels.*;
    import org.jfree.ui.*;
    import java.awt.*;
    import java.text.*;
    import javax.swing.JPanel;
    import org.jfree.chart.axis.DateAxis;
    import org.jfree.chart.axis.ValueAxis;
    import org.jfree.chart.axis.NumberAxis;
    
    public class LineChart extends ApplicationFrame {
    
        private static final long serialVersionUID = 1L;
    
        // 测试的main方法,显示是以JPanel窗体的形式显示的
        public static void main(String[] args) {
            LineChart LineChart= new LineChart("曲线图");
            LineChart.pack();
            RefineryUtilities.centerFrameOnScreen(LineChart);
            LineChart.setVisible(true);
        }
    
        public LineChart(String s) {
            super(s);
            setContentPane(createDemoLine());
        }
    
        // 生成显示图表的面板
        public static JPanel createDemoLine() {
            JFreeChart jfreechart = createChart(createDataset());
            return new ChartPanel(jfreechart);
        }
    
        // 生成图表主对象JFreeChart
        public static JFreeChart createChart(TimeSeriesCollection linedataset) {
            JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份",
                    "访问量", linedataset, true, true, true);
    
            // 设置消除字体的锯齿渲染(解决中文问题)
            chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
                    RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
    
            // 设置主标题
            chart.setTitle(new TextTitle("blog访问量统计", new Font("楷书", Font.ITALIC,
                    20)));
            chart.setAntiAlias(true);
            // 设置子标题
            TextTitle subtitle = new TextTitle("2010/2011年度访问量对比", new Font("宋体",
                    Font.BOLD, 12));
            chart.addSubtitle(subtitle);
    
            XYPlot plot = (XYPlot) chart.getPlot();
    
            XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) plot
                    .getRenderer();
    
            // 设置网格背景颜色
            plot.setBackgroundPaint(Color.white);
            // 设置网格竖线颜色
            plot.setDomainGridlinePaint(Color.pink);
            // 设置网格横线颜色
            plot.setRangeGridlinePaint(Color.pink);
            // 设置曲线与xy轴的距离
            plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
            // 设置曲线是否显示数据点
            xylineandshaperenderer.setBaseShapesVisible(true);
            // 设置曲线显示各项数据点的值
            XYItemRenderer xyitem = plot.getRenderer();
            xyitem.setBaseItemLabelsVisible(true);
            xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(
                    ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
            xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
            xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));
            plot.setRenderer(xyitem);
    
            // 设置X轴日期显示的格式
            SimpleDateFormat format = new SimpleDateFormat("yyyy/MM");
            DateAxis axis = (DateAxis) plot.getDomainAxis();
            axis.setDateFormatOverride(format);// 设置x轴数据单位以×年×月方式显示
    
            ValueAxis valueAxis = plot.getDomainAxis();
            // 设置x轴上面的字体
            valueAxis.setTickLabelFont(new Font("隶书", Font.ITALIC, 12));
            // 设置X轴的标题文字
            valueAxis.setLabelFont(new Font("隶书", Font.ITALIC, 12));
            NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
            // 设置y轴上的字体
            numberAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 13));
            // 设置y轴上的标题字体
            numberAxis.setLabelFont(new Font("宋体", Font.PLAIN, 13));
            // 设置底部的字体
            chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
    
            return chart;
        }
    
        // 生成数据
        public static TimeSeriesCollection createDataset() {
            // 访问量统计时间线
            TimeSeries timeSeries1 = new TimeSeries("2010年度", Month.class);
            TimeSeries timeSeries2 = new TimeSeries("2011年度", Month.class);
    
            // 时间曲线数据集合
            TimeSeriesCollection lineDataset = new TimeSeriesCollection();
    
            // 构造数据集合
            timeSeries1.add(new Month(1, 2011), 7200);
            timeSeries1.add(new Month(2, 2011), 7000);
            timeSeries1.add(new Month(3, 2011), 4200);
            timeSeries1.add(new Month(4, 2011), 8200);
            timeSeries1.add(new Month(5, 2011), 7300);
            timeSeries1.add(new Month(6, 2011), 8200);
            timeSeries1.add(new Month(7, 2011), 9200);
            timeSeries1.add(new Month(8, 2011), 7300);
            timeSeries1.add(new Month(9, 2011), 9400);
            timeSeries1.add(new Month(10, 2011), 7500);
            timeSeries1.add(new Month(11, 2011), 6600);
            timeSeries1.add(new Month(12, 2011), 3500);
            timeSeries2.add(new Month(1, 2011), 10200);
            timeSeries2.add(new Month(2, 2011), 9000);
            timeSeries2.add(new Month(3, 2011), 6200);
            timeSeries2.add(new Month(4, 2011), 8200);
            timeSeries2.add(new Month(5, 2011), 8200);
            timeSeries2.add(new Month(6, 2011), 11200);
            timeSeries2.add(new Month(7, 2011), 13200);
            timeSeries2.add(new Month(8, 2011), 8300);
            timeSeries2.add(new Month(9, 2011), 10400);
            timeSeries2.add(new Month(10, 2011), 12500);
            timeSeries2.add(new Month(11, 2011), 10600);
            timeSeries2.add(new Month(12, 2011), 10500);
    
            lineDataset.addSeries(timeSeries1);
            lineDataset.addSeries(timeSeries2);
    
            return lineDataset;
        }
    
    }

    result

    运行截图如下:

    image

  • 相关阅读:
    【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
    【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
    【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
    March 11th, 2018 Week 11th Sunday
    March 10th, 2018 Week 10th Saturday
    March 09th, 2018 Week 10th Friday
    March 08th, 2018 Week 10th Thursday
    March 07th, 2018 Week 10th Wednesday
    ubantu之Git使用
    AMS分析 -- 启动过程
  • 原文地址:https://www.cnblogs.com/BelieveFish/p/10314975.html
Copyright © 2011-2022 走看看