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

  • 相关阅读:
    Python爬虫连载9-JS加密之“盐”​、ajax请求
    Java连载86-List集合详解
    HTML连载69-透视属性以及其他属性练习
    Java连载85-集合的Contains和Remove方法
    Python爬虫连载8-JS加密(一)
    Java连载84-Collection的常用方法、迭代器
    HTML连载68-形变中心点、形变中心轴
    Java连载83-单向链表、双向链表、collections常用方法
    [刷题] 447 Number of Boomerangs
    [刷题] 454 4Sum II
  • 原文地址:https://www.cnblogs.com/BelieveFish/p/10314975.html
Copyright © 2011-2022 走看看