`
lilin530
  • 浏览: 90608 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多

四、折线图
   折线图的dataset 两种CatagoryDataset接口(具体实现类是DefaultCategoryDataset),XYDataset 接口
   1、CatagoryDataset接口:        
   A、创建一个数据源(dataset):
    private static CategoryDataset createDataset()
    {
        String series1 = "First";
        String series2 = "Second";
        String series3 = "Third";
        String type1 = "Type 1";
        String type2 = "Type 2";
        String type3 = "Type 3";
        String type4 = "Type 4";
        String type5 = "Type 5";
        String type6 = "Type 6";
        String type7 = "Type 7";
        String type8 = "Type 8";
        DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
        defaultcategorydataset.addValue(1.0D, series1, type1);
        defaultcategorydataset.addValue(4D, series1, type2);
        defaultcategorydataset.addValue(3D, series1, type3);
        defaultcategorydataset.addValue(5D, series1, type4);
        defaultcategorydataset.addValue(5D, series1, type5);
        defaultcategorydataset.addValue(7D, series1, type6);
        defaultcategorydataset.addValue(7D, series1, type7);
        defaultcategorydataset.addValue(8D, series1, type8);
       
        defaultcategorydataset.addValue(5D, series2, type1);
        defaultcategorydataset.addValue(7D, series2, type2);
        defaultcategorydataset.addValue(6D, series2, type3);
        defaultcategorydataset.addValue(8D, series2, type4);
        defaultcategorydataset.addValue(4D, series2, type5);
        defaultcategorydataset.addValue(4D, series2, type6);
        defaultcategorydataset.addValue(2D, series2, type7);
        defaultcategorydataset.addValue(1.0D, series2, type8);
       
        defaultcategorydataset.addValue(4D, series3, type1);
        defaultcategorydataset.addValue(3D, series3, type2);
        defaultcategorydataset.addValue(2D, series3, type3);
        defaultcategorydataset.addValue(3D, series3, type4);
        defaultcategorydataset.addValue(6D, series3, type5);
        defaultcategorydataset.addValue(3D, series3, type6);
        defaultcategorydataset.addValue(4D, series3, type7);
        defaultcategorydataset.addValue(3D, series3, type8);
        return defaultcategorydataset;
    }
   B、由ChartFactory  产生 JFreeChart 对象     (与上面重复的部分就不再注释)
    private static JFreeChart createChart(CategoryDataset categorydataset)
    {
        JFreeChart jfreechart = ChartFactory.createLineChart("Line Chart Demo 1",
                                                             "Type",
                                                             "Value",
                                                             categorydataset,
                                                             PlotOrientation.VERTICAL,
                                                             true,
                                                             true,
                                                             false);
        jfreechart.setBackgroundPaint(Color.white);
        CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
        categoryplot.setBackgroundPaint(Color.lightGray);
        categoryplot.setRangeGridlinePaint(Color.white);
        NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        numberaxis.setAutoRangeIncludesZero(true);
        //获得renderer 注意这里是下嗍造型到lineandshaperenderer!!
        LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
        lineandshaperenderer.setShapesVisible(true); //series 点(即数据点)可见
        lineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
            10F, 6F
        }, 0.0F)); //定义series为"First"的(即series1)点之间的连线 ,这里是虚线,默认是直线
        lineandshaperenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
            6F, 6F
        }, 0.0F)); //定义series为"Second"的(即series2)点之间的连线
        lineandshaperenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
            2.0F, 6F
        }, 0.0F)); //定义series为"Third"的(即series3)点之间的连线
        return jfreechart;
    }
        一些重要的方法:
        lineandshaperenderer.setLineVisible(true)  //series 点(即数据点)间有连线可见
   2、XYDataset 接口:
   A、创建一个数据源(dataset):
    private static XYDataset createDataset()
    {
        XYSeries xyseries = new XYSeries("First"); //先产生XYSeries 对象
        xyseries.add(1.0D, 1.0D);
        xyseries.add(2D, 4D);
        xyseries.add(3D, 3D);
        xyseries.add(4D, 5D);
        xyseries.add(5D, 5D);
        xyseries.add(6D, 7D);
        xyseries.add(7D, 7D);
        xyseries.add(8D, 8D);
       
        XYSeries xyseries1 = new XYSeries("Second");
        xyseries1.add(1.0D, 5D);
        xyseries1.add(2D, 7D);
        xyseries1.add(3D, 6D);
        xyseries1.add(4D, 8D);
        xyseries1.add(5D, 4D);
        xyseries1.add(6D, 4D);
        xyseries1.add(7D, 2D);
        xyseries1.add(8D, 1.0D);
       
        XYSeries xyseries2 = new XYSeries("Third");
        xyseries2.add(3D, 4D);
        xyseries2.add(4D, 3D);
        xyseries2.add(5D, 2D);
        xyseries2.add(6D, 3D);
        xyseries2.add(7D, 6D);
        xyseries2.add(8D, 3D);
        xyseries2.add(9D, 4D);
        xyseries2.add(10D, 3D);
       
        XYSeriesCollection xyseriescollection = new XYSeriesCollection(); //再用XYSeriesCollection添加入XYSeries 对象
        xyseriescollection.addSeries(xyseries);
        xyseriescollection.addSeries(xyseries1);
        xyseriescollection.addSeries(xyseries2);
        return xyseriescollection;
    }
   B、由ChartFactory  产生 JFreeChart 对象
    private static JFreeChart createChart(XYDataset xydataset)
    {
        JFreeChart jfreechart = ChartFactory.createXYLineChart("Line Chart Demo 2",
                                                               "X",
                                                               "Y",
                                                               xydataset,
                                                               PlotOrientation.VERTICAL,
                                                               true,
                                                               true,
                                                               false);
        jfreechart.setBackgroundPaint(Color.white);
        XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //获得 plot:XYPlot!!
        xyplot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色
        xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); //设定坐标轴与图表数据显示部分距离
        xyplot.setDomainGridlinePaint(Color.white); //网格线颜色
        xyplot.setRangeGridlinePaint(Color.white);
        //获得 renderer 注意这里是XYLineAndShapeRenderer !!
        XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
        xylineandshaperenderer.setShapesVisible(true); //数据点可见
        xylineandshaperenderer.setShapesFilled(true); //数据点被填充即不是空心点
        NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        return jfreechart;
    }                     
   一些重要的方法:
        XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();
        xylineandshaperenderer.setSeriesLinesVisible(0, false); //第一个XYSeries数据点间连线不可见
        xylineandshaperenderer.setSeriesShapesVisible(1, false); //第二个XYSeries数据点不可见
        xyplot.setRenderer(xylineandshaperenderer);  
       
五、时间序列图
    时间序列图和折线图很相似,不同的是它在 domain轴的数据是时间而不是数字。 时间序列图的dataset 是
    XYDataset 接口,具体实现类是TimeSeriesCollection ,和上面类似,有TimeSeries 对象,它被添加入
    TimeSeriesCollection 。                                                                              
  1、创建一个数据源(dataset):
    private static XYDataset createDataset()
    {
        TimeSeries timeseries = new TimeSeries("L&G European Index Trust",Month.class);
        timeseries.add(new Month(2, 2001), 181.8D);//这里用的是Month.class,同样还有Day.class Year.class 等等
        timeseries.add(new Month(3, 2001), 167.3D);
        timeseries.add(new Month(4, 2001), 153.8D);
        timeseries.add(new Month(5, 2001), 167.6D);
        timeseries.add(new Month(6, 2001), 158.8D);
        timeseries.add(new Month(7, 2001), 148.3D);
        timeseries.add(new Month(8, 2001), 153.9D);
        timeseries.add(new Month(9, 2001), 142.7D);
        timeseries.add(new Month(10, 2001), 123.2D);
        timeseries.add(new Month(11, 2001), 131.8D);
        timeseries.add(new Month(12, 2001), 139.6D);
        timeseries.add(new Month(1, 2002), 142.9D);
        timeseries.add(new Month(2, 2002), 138.7D);
        timeseries.add(new Month(3, 2002), 137.3D);
        timeseries.add(new Month(4, 2002), 143.9D);
        timeseries.add(new Month(5, 2002), 139.8D);
        timeseries.add(new Month(6, 2002), 137D);
        timeseries.add(new Month(7, 2002), 132.8D);
       
        TimeSeries timeseries1 = new TimeSeries("L&G UK Index Trust",Month.class);
        timeseries1.add(new Month(2, 2001), 129.6D);
        timeseries1.add(new Month(3, 2001), 123.2D);
        timeseries1.add(new Month(4, 2001), 117.2D);
        timeseries1.add(new Month(5, 2001), 124.1D);
        timeseries1.add(new Month(6, 2001), 122.6D);
        timeseries1.add(new Month(7, 2001), 119.2D);
        timeseries1.add(new Month(8, 2001), 116.5D);
        timeseries1.add(new Month(9, 2001), 112.7D);
        timeseries1.add(new Month(10, 2001), 101.5D);
        timeseries1.add(new Month(11, 2001), 106.1D);
        timeseries1.add(new Month(12, 2001), 110.3D);
        timeseries1.add(new Month(1, 2002), 111.7D);
        timeseries1.add(new Month(2, 2002), 111D);
        timeseries1.add(new Month(3, 2002), 109.6D);
        timeseries1.add(new Month(4, 2002), 113.2D);
        timeseries1.add(new Month(5, 2002), 111.6D);
        timeseries1.add(new Month(6, 2002), 108.8D);
        timeseries1.add(new Month(7, 2002), 101.6D);
        TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
        timeseriescollection.addSeries(timeseries);
        timeseriescollection.addSeries(timeseries1);
        timeseriescollection.setDomainIsPointsInTime(true); //domain轴上的刻度点代表的是时间点而不是时间段
        return timeseriescollection;
    }
   2、由ChartFactory  产生 JFreeChart 对象
    private static JFreeChart createChart(XYDataset xydataset)
    {
        JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("Legal & General Unit Trust Prices",
                                                                   "Date",
                                                                   "Price Per Unit",
                                                                   xydataset,
                                                                   true,
                                                                   true,
                                                                   false);
        jfreechart.setBackgroundPaint(Color.white);
        XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //获得 plot : XYPlot!!
        xyplot.setBackgroundPaint(Color.lightGray);
        xyplot.setDomainGridlinePaint(Color.white);
        xyplot.setRangeGridlinePaint(Color.white);
        xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
        xyplot.setDomainCrosshairVisible(true);
        xyplot.setRangeCrosshairVisible(true);
        org.jfree.chart.renderer.xy.XYItemRenderer xyitemrenderer = xyplot.getRenderer();
        if(xyitemrenderer instanceof XYLineAndShapeRenderer)
        {
            XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyitemrenderer;
            xylineandshaperenderer.setDefaultShapesVisible(true); //数据点可见
            xylineandshaperenderer.setDefaultShapesFilled(true);  //数据点是实心点
        }
        DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //对domain 轴上日期显示格式定义
        dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));
        return jfreechart;
    } 
       一些重要的方法:
     A、增加标记线:
        xyplot.addRangeMarker(new ValueMarker(550D)); //数值轴
        Quarter quarter = new Quarter(2, 2002);
        xyplot.addDomainMarker(new ValueMarker(quarter.getMiddleMillisecond()));  //时间轴
     B、数据点的调整
        XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
        xylineandshaperenderer.setDefaultShapesVisible(true);  //数据点可见
        xylineandshaperenderer.setSeriesFillPaint(0, Color.red);  //数据点填充为红色
        xylineandshaperenderer.setSeriesFillPaint(1, Color.white);  //数据点填充为白色
        xylineandshaperenderer.setUseFillPaint(true);    //应用
     C、平均值曲线
       这个曲线有什么用呢?很简单的例子,这里有一个以半年每天为单位的数据绘制的曲线,我们想看看以月为单位数据
       的变化,这时就可以用到它了。
        TimeSeries timeseries = createEURTimeSeries();  //就是以半年每天为单位的数据
        TimeSeries timeseries1 = MovingAverage.createMovingAverage(timeseries,
                                                                   "30 day moving average",
                                                                   30, //30天为一个周期
                                                                   30); //最开始的30天跳过
        TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
        timeseriescollection.addSeries(timeseries);
        timeseriescollection.addSeries(timeseries1);
        return timeseriescollection;
    
六、总结一下
                           dataset                          plot                    renderer                      
  饼图           PieDataset(DefaultPieDataset)           PiePlot                    ------
  柱状图    CatagoryDataset(DefaultCategoryDataset)    CategoryPlot                BarRenderer
  折线图    CatagoryDataset(DefaultCategoryDataset)    CategoryPlot              LineAndShapeRenderer
                  XYDataset(XYSeriesCollection)           XYPlot                XYLineAndShapeRenderer
  时间序列图     XYDataset (TimeSeriesCollection)         XYPlot                XYLineAndShapeRenderer

 

分享到:
评论

相关推荐

    C#绘制折线图

    C#绘制折线图 折线图是一种常用的数据可视化方法,用于展示数据的趋势和变化。C#提供了多种绘制折线图的方法,包括使用 Graphics 类、Bitmap 类和 Pen 类等。在本文中,我们将介绍如何使用 C# 绘制折线图,包括绘制...

    EasyUI表格合并,及echarts折线图,导出折线图为图片

    接着,"Echarts折线图"部分则涵盖了如何使用Echarts库创建动态、交互式的折线图。Echarts提供了一系列参数供开发者配置,如`series`定义数据序列,`xAxis`和`yAxis`定义坐标轴,`tooltip`定义提示框等。通过灵活调整...

    PB自定义折线图

    在PB中,自定义折线图是一项关键功能,它允许开发者根据特定需求创建具有个性化特性的图表,以便更好地可视化数据。本文将深入探讨PB自定义折线图的相关知识点,并通过分析"Graph2"这个文件来提供具体的实践指导。 ...

    js实现折线图

    在JavaScript(js)中实现折线图是一种常见的数据可视化需求,尤其在网页开发中,用于展示动态或静态的数据。折线图能够清晰地展现数据的变化趋势,帮助用户理解和分析数据。下面将详细介绍如何使用JavaScript来创建...

    MPAndroidChart折线图Demo

    MPAndroidChart是一款强大的开源库,用于在Android平台上创建各种图表,包括折线图、柱状图、饼图等。这个"MPAndroidChart折线图Demo"是开发者分享的一个实例,帮助我们了解如何在Android应用中集成和使用...

    java折线图绘制程序

    在Java编程环境中,绘制折线图是一项常见的任务,特别是在数据分析、可视化或教学示例中。这个"java折线图绘制程序"是专为这个目的设计的,它允许开发者和用户轻松地创建和显示折线图,以便更好地理解和解释数据。 ...

    折线图的实现

    在数据分析和可视化领域,折线图是一种非常常见且实用的图表类型,用于展示数据随时间变化的趋势或比较多个变量的变化情况。本主题将深入探讨如何实现一个简单的折线图,并探讨其可扩展性。 首先,我们需要理解折线...

    折线图_折线图_

    在数据分析和可视化领域,折线图是一种非常常见且强大的工具,尤其在展示数据随时间变化的趋势时尤为适用。本文将针对R语言的新手和小白,详细介绍如何使用R语言绘制出美观且具有信息量的折线图。 首先,我们需要...

    JSP利用JFreeChart生成折线图

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而JFreeChart则是一个强大的Java图表库,能够帮助开发者生成各种复杂的图表,包括折线图。本教程将详细介绍如何在JSP中利用JFreeChart库来...

    Android折线图多条数据实时动态更新,控制折线图上数据的精度

    MPAndroidChart是一个强大的开源库,它允许开发者轻松地创建各种图表,包括折线图。本篇将深入探讨如何利用MPAndroidChart实现多条数据的实时动态更新,并控制折线图上数据的精度。 首先,我们需要了解...

    android自定义折线图曲线图

    在Android开发中,自定义视图是实现特定图形或交互效果的重要手段,而自定义折线图和曲线图则是数据可视化中的常见需求。本篇将深入探讨如何在Android环境中实现这两种图表。 首先,我们需要理解折线图和曲线图的...

    Winform绘制折线图

    在Winform应用中,有时我们需要展示数据,其中一种常见的方式就是通过图表,比如折线图。折线图能直观地表示数值随时间或某个连续变量的变化趋势。本示例将探讨如何在Winform应用中实现自定义的折线图绘制。 首先,...

    asp生成折线图源码

    在ASP中生成折线图是常见的数据可视化需求,这通常涉及到JavaScript图表库或者服务器端组件的使用。下面将详细探讨如何在ASP中实现折线图的生成。 一、原理介绍 ASP生成折线图的基本流程通常是:在服务器端处理数据...

    可滑动可点击的折线图

    在IT行业中,数据可视化是数据分析和展示的重要环节,而折线图作为一种常见且直观的数据图表类型,被广泛应用于各种场景,如经济走势分析、趋势预测、项目进度追踪等。"可滑动可点击的折线图"是一个特殊的设计,它...

    swing中使用jfreenchart绘制柱状图,折线图,折线图中可动态添加线

    在Java的Swing环境中,JFreeChart库是一个强大的工具,用于创建各种图表,包括柱状图、折线图等。本教程将详细讲解如何利用JFreeChart在Swing应用程序中实现这些功能,以及如何在折线图中动态添加线。 首先,确保你...

    Android studio实现折线图

    在Android开发中,折线图是一种常见的数据可视化方式,它能直观地展示数据的变化趋势。本文将详细讲解如何使用Android Studio来实现一个折线图。 首先,你需要选择一个图形库来帮助绘制折线图。在Android社区中,有...

    VS2008环境下Teechart绘制折线图柱状图

    VS2008环境下Teechart绘制折线图柱状图 TeeChart是业界知名的数据可视化控件,它可以帮助开发者快速创建各种类型的图表,例如折线图、柱状图、三维图等。在VS2008环境下使用TeeChart绘制折线图柱状图需要按照以下...

    jq报表折线图

    "jq报表折线图"这个功能模块显然聚焦于利用jQuery(jq)库来实现动态和交互式的报表,特别是折线图这一图表类型。以下是关于这个主题的详细解释: **jQuery(jq)库** jQuery是一个轻量级的JavaScript库,它简化了...

    VB6绘制动态折线图(含源码)

    在VB6(Visual Basic 6)编程环境中,创建动态折线图是一项常见的需求,尤其是在数据分析、可视化和实时数据展示的应用中。本项目提供的"VB6动态折线图"源码,可以帮助开发者快速实现这一功能,它包含有以下关键知识...

Global site tag (gtag.js) - Google Analytics