当前位置:首页 > 编程教程 > java技术文章 > JFreeChart折线图的生成方法

JFreeChart折线图的生成实例详解

  • 发布时间:
  • 作者:码农之家
  • 点击:92

这篇文章主要知识点是关于jfreechart、折线图、jfreechart画折线图的方法 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Java微服务
Java微服务高清版
  • 类型:Java大小:120 MB格式:PDF作者:沙鲁巴·夏尔马
立即下载

JFreeChart折线图的生成方法

JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。

折线图的实例

package com.sprite.test; 
 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartUtilities; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; 
import org.jfree.chart.plot.CategoryPlot; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.renderer.category.LineAndShapeRenderer; 
import org.jfree.data.category.CategoryDataset; 
import org.jfree.data.general.DatasetUtilities; 
 
//JFreeChart Line Chart(折线图)   
public class TestJFreeChart { 
  /** 
   * 创建JFreeChart Line Chart(折线图) 
   */ 
  public static void main(String[] args) { 
    // 步骤1:创建CategoryDataset对象(准备数据) 
    CategoryDataset dataset = createDataset(); 
    // 步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置 
    JFreeChart freeChart = createChart(dataset); 
    // 步骤3:将JFreeChart对象输出到文件,Servlet输出流等 
    saveAsFile(freeChart, "E:\\line.jpg", 600, 400); 
  } 
 
  // 保存为文件 
  public static void saveAsFile(JFreeChart chart, String outputPath, 
      int weight, int height) { 
    FileOutputStream out = null; 
    try { 
      File outFile = new File(outputPath); 
      if (!outFile.getParentFile().exists()) { 
        outFile.getParentFile().mkdirs(); 
      } 
      out = new FileOutputStream(outputPath); 
      // 保存为PNG 
      // ChartUtilities.writeChartAsPNG(out, chart, 600, 400); 
      // 保存为JPEG 
      ChartUtilities.writeChartAsJPEG(out, chart, 600, 400); 
      out.flush(); 
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } finally { 
      if (out != null) { 
        try { 
          out.close(); 
        } catch (IOException e) { 
          // do nothing 
        } 
      } 
    } 
  } 
 
  // 根据CategoryDataset创建JFreeChart对象 
  public static JFreeChart createChart(CategoryDataset categoryDataset) { 
    // 创建JFreeChart对象:ChartFactory.createLineChart 
    JFreeChart jfreechart = ChartFactory.createLineChart("不同类别按小时计算拆线图", // 标题 
        "年分", // categoryAxisLabel (category轴,横轴,X轴标签) 
        "数量", // valueAxisLabel(value轴,纵轴,Y轴的标签) 
        categoryDataset, // dataset 
        PlotOrientation.VERTICAL, true, // legend 
        false, // tooltips 
        false); // URLs 
    // 使用CategoryPlot设置各种参数。以下设置可以省略。 
    CategoryPlot plot = (CategoryPlot)jfreechart.getPlot(); 
    // 背景色 透明度 
    plot.setBackgroundAlpha(0.5f); 
    // 前景色 透明度 
    plot.setForegroundAlpha(0.5f); 
    // 其他设置 参考 CategoryPlot类 
    LineAndShapeRenderer renderer = (LineAndShapeRenderer)plot.getRenderer(); 
    renderer.setBaseShapesVisible(true); // series 点(即数据点)可见 
    renderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见 
    renderer.setUseSeriesOffset(true); // 设置偏移量 
    renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
    renderer.setBaseItemLabelsVisible(true); 
    return jfreechart; 
  } 
 
  /** 
   * 创建CategoryDataset对象 
   * 
   */ 
  public static CategoryDataset createDataset() { 
    String[] rowKeys = {"A平台"}; 
    String[] colKeys = {"0:00", "1:00", "2:00", "7:00", "8:00", "9:00", 
        "10:00", "11:00", "12:00", "13:00", "16:00", "20:00", "21:00", 
        "23:00"}; 
    double[][] data = {{4, 3, 1, 1, 1, 1, 2, 2, 2, 1, 8, 2, 1, 1},}; 
    // 或者使用类似以下代码 
    // DefaultCategoryDataset categoryDataset = new 
    // DefaultCategoryDataset(); 
    // categoryDataset.addValue(10, "rowKey", "colKey"); 
    return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data); 
  } 
} 

生成效果图:

JFreeChart折线图的生成方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

jfreechart画折线图的方法

JFreeChart 是开放源代码站点SourceForge.net 上的一个 JAVA 项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈柱状图 )、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

应用jfreechart来画图需要两个jar包:jfreechart.jar和jcommon.jar,下载地址。

下面是一个画折线图的例子:

package yuth.jfree.demo; 
/** 
 * 使用 categoryDataset 数据集创建折线图 
 * 当数据多时,在JPanel中无法完全看到横坐标的值,显示为省略号。 
 * 解决方法: 
 *  方法1、将报表保存为图片时,设置图片的宽度足够大(2000或3000),图片可以显示横坐标值。 
 *    这种方法治标不治本,所以有了第2种方法 
 *  方法2、设置X轴上的Lable让其45度倾斜。 
 */ 
import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.geom.Ellipse2D; 
import java.io.File; 
import java.io.IOException; 
import java.net.URL; 
import java.text.DecimalFormat; 
import java.util.Random; 
 
import javax.swing.ImageIcon; 
import javax.swing.JPanel; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.ChartUtilities; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.axis.CategoryAxis; 
import org.jfree.chart.axis.CategoryLabelPositions; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; 
import org.jfree.chart.plot.CategoryPlot; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.renderer.category.LineAndShapeRenderer; 
import org.jfree.chart.title.TextTitle; 
import org.jfree.data.category.CategoryDataset; 
import org.jfree.data.category.DefaultCategoryDataset; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.HorizontalAlignment; 
import org.jfree.ui.RectangleEdge; 
import org.jfree.ui.RectangleInsets; 
import org.jfree.ui.RefineryUtilities; 
 
public class LineChartDemo1 extends ApplicationFrame { 
 
 private static final long serialVersionUID = -6354350604313079793L; 
 /* synthetic */static Class class$demo$LineChartDemo1; 
 
 public LineChartDemo1(String string) { 
   super(string); 
  JPanel jpanel = createDemoPanel(); 
  jpanel.setPreferredSize(new Dimension(500, 270)); 
   setContentPane(jpanel); 
 } 
 
  
  
 /** 
  * 如何区分不同的图例:根据DefaultCategoryDataset.addValue()的第二个参数是否相同来区分。 
  * 同一个图例的数据的添加顺序影响最终的显示;不同图例的数据的添加顺序不影响最终的显示。 
  * @return 
  */ 
 private static CategoryDataset createDataset() { 
  DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset(); 
  //defaultcategorydataset.addValue()的参数解析:(数值,图例名,横坐标值) 
/*  
  //添加数据方法1 
  //图例1 
  defaultcategorydataset.addValue(212.0, "First", "1001.0"); 
   defaultcategorydataset.addValue(504.0, "First", "1001.1"); 
  defaultcategorydataset.addValue(1520.0, "First", "1001.2"); 
 
  //图例2 
  defaultcategorydataset.addValue(712.0, "Second", "1001.0"); 
   defaultcategorydataset.addValue(1204.0, "Second", "1001.1"); 
  defaultcategorydataset.addValue(1820.0, "Second", "1001.2");   
/*/ 
//* 
  //添加数据方法2 
  //实验随机数来生成测试结果 
  Random random = new Random(12345); 
 
  //图例1,40个数据 
  for(int i=0;i<40;i++){ 
   defaultcategorydataset.addValue(random.nextInt(100000), 
     "First",String.valueOf(1000+i) ); 
  } 
  //图例2,40个数据 
  for (int i = 0; i < 40; i++) { 
   defaultcategorydataset.addValue(random.nextInt(100000), 
     "Second", String.valueOf(1000 + i)); 
  } 
//*/   
   
  return defaultcategorydataset; 
 } 
 
 private static JFreeChart createChart(CategoryDataset categorydataset) { 
  JFreeChart jfreechart = ChartFactory.createLineChart( 
    "jfreechart test",// 图表标题 
    "X", // 主轴标签(x轴) 
    "Y",// 范围轴标签(y轴) 
    categorydataset, // 数据集 
    PlotOrientation.VERTICAL,// 方向 
    false, // 是否包含图例 
    true, // 提示信息是否显示 
    false);// 是否使用urls 
   
  // 改变图表的背景颜色 
  jfreechart.setBackgroundPaint(Color.white); 
   
  CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot(); 
  categoryplot.setBackgroundPaint(Color.lightGray); 
  categoryplot.setRangeGridlinePaint(Color.white); 
  categoryplot.setRangeGridlinesVisible(false); 
 
  //修改范围轴。 我们将默认刻度值 (允许显示小数) 改成只显示整数的刻度值。 
  NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); 
  numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 
   
  // 设置X轴上的Lable让其45度倾斜 
  CategoryAxis domainAxis = categoryplot.getDomainAxis(); 
  domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 设置X轴上的Lable让其45度倾斜  
   domainAxis.setLowerMargin(0.0); // 设置距离图片左端距离 
   domainAxis.setUpperMargin(0.0); // 设置距离图片右端距离 
   
   
   
  LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot 
    .getRenderer(); 
  lineandshaperenderer.setShapesVisible(true); 
  lineandshaperenderer.setDrawOutlines(true); 
  lineandshaperenderer.setUseFillPaint(true); 
  lineandshaperenderer.setBaseFillPaint(Color.white); 
  lineandshaperenderer.setSeriesStroke(0, new BasicStroke(3.0F)); 
  lineandshaperenderer.setSeriesOutlineStroke(0, new BasicStroke(2.0F)); 
  lineandshaperenderer.setSeriesShape(0, new Ellipse2D.Double(-5.0, -5.0, 
    10.0, 10.0)); 
  lineandshaperenderer.setItemMargin(0.4); //设置x轴每个值的间距(不起作用??) 
   
  // 显示数据值 
  DecimalFormat decimalformat1 = new DecimalFormat("##.##");// 数据点显示数据值的格式 
  lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator( 
    "{2}", decimalformat1));// 设置数据项标签的生成器 
  lineandshaperenderer.setBaseItemLabelsVisible(true);// 基本项标签显示 
  lineandshaperenderer.setBaseShapesFilled(true);// 在数据点显示实心的小图标 
     
   
  return jfreechart; 
 } 
 
 public static JPanel createDemoPanel() { 
  JFreeChart jfreechart = createChart(createDataset()); 
 
  try { 
   ChartUtilities.saveChartAsJPEG( 
     new File("D:/LineChartDemo1.png"), //文件保存物理路径包括路径和文件名 
     // 1.0f, //图片质量 ,0.0f~1.0f 
      jfreechart, //图表对象 
     1024, //图像宽度 ,这个将决定图表的横坐标值是否能完全显示还是显示省略号 
     768); 
  } catch (IOException e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  } //图像高度 
     
  return new ChartPanel(jfreechart); 
 } 
 
 public static void main(String[] strings) { 
  LineChartDemo1 linechartdemo1 = new LineChartDemo1( 
    "JFreeChart - Line Chart Demo 1"); 
  linechartdemo1.pack(); 
  RefineryUtilities.centerFrameOnScreen(linechartdemo1); 
  linechartdemo1.setVisible(true); 
 } 
 
 /* synthetic */ 
 static Class class$(String string) { 
  Class var_class; 
  try { 
   var_class = Class.forName(string); 
  } catch (ClassNotFoundException classnotfoundexception) { 
   throw new NoClassDefFoundError(classnotfoundexception.getMessage()); 
  } 
  return var_class; 
 } 
} 

运行结果:

jfreechart画折线图的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

您可能感兴趣的文章:

  • java异常处理教程及实例总结
  • Java异常处理实例教程 1、什么是异常? 首先,让我们来看看下图的例子: 在这个例子中,存在的错误码由除以0的结果。由于除以0而导致异常: ArithmeticException HelloException.java package com.yiibai.tutorial.exception;public class HelloException { public static void main(String[] args) { System.out.println(Three); // This division no problem. int value = 10 / 2; System.out.println(Two); // This division no problem. value = 10 / 1; System.out.print……

  • Java透明窗体的设置实例方法
  • 若将JDK版本升级到最新版本,Java窗体就可以简单实现窗体的透明效果,用户可以通过拉动滑块(Slider)调整窗体透明度,实现窗体不同透明程度的切换。下面让我简单实现窗体透明效果,用户可以做些扩展。 步骤(STEPS) 打开Java开发工具Eclipse软件,依次选择文件、新建、项目,在新建项目窗口中选择Java项目,然后点击下一步按钮。 在出现的窗体中的项目名称后自定义输入项目名……

  • Java的校验银行卡功能实例代码
  • 本文实例讲述了Java实现的校验银行卡功能。分享给大家供大家参考,具体如下: 步骤: 首先区分借记卡和信用卡,然后就是校验卡号,最后根据银联Bin确定什么银行,Bin之后就是归属地。 本文所有数据来源于网络,不一定保证正确和完整,这里仅仅作为教学使用。 Java代码: package org.luozhuang.bankcard;public class checkBankCard { /* 当你输入信用卡号码的时候,有没有担心输错了而造成……

  • Java调用CXF WebService接口的方式实例总结
  • 通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了。 1.静态调用 // 创建WebService客户端代理工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); // 判断是否抛出异常 factory.getOutInterceptors().add(new LoggingInInterceptor()); // 注册webservice接口 factory.setServiceClass(DeductionService.class); // 配置webservice地址 factory.setAddress(http://localhost:7002/card/services/HelloWorld?wsdl); // 获得接口对……

  • java使用栈的迷宫算法的实例代码
  • 本文为大家分享了使用栈的迷宫算法java版,主要考察栈的使用,供大家参考,具体内容如下 主要思路如下: do { if(当前位置可通过) { 标记此位置已走过; 保存当前位置并入栈; if(当前位置为终点) { 程序结束; } 获取下一个位置; } else { if(栈非空) { 出栈; while(当前位置方向为4且栈非空) { 标记当前位置不可走; 出栈; } if(当前位置的方向小于4) { 方向+1; 重新入栈; 获取下一个位置; }……

  • JavaScript输出所选择起始与结束日期的实例代码
  • 本文实例讲述了JavaScript输出所选择起始与结束日期的方法。分享给大家供大家参考,具体如下: 一直在用公司的报表工具做报表,报表里最常用的查询条件就是开始日期、结束日期。 自己会一点html和js,于是就想用html+JavaScript来实现选择查询日期,以及做出相应。 实现之后,觉得这个还是比较简单的,N年前学的html和javascript,总算是派上用场了,人人都可以开发网页。 这个代……

    JFreeChart实例 相关电子书
    学习笔记
    网友NO.246860

    JFreeChart实现实时曲线图

    最近要用到实时曲线图,在网上大概找了一下,有两种实现方式,一种就是JFreeChart的官方实例MemoryUsageDemo.java.通过一个实现java.Swing.Timer的内部类,在其监听器中将实时数据添加进TimeSeries,由于Timer是会实时执行的,所以这个方法倒是没有什么问题,可以参考代码。 另一种方式就是将实时类实现Runnable接口,在其run()方法中,通过无限循环将实时数据添加进TimeSeries,下面是较简单的实现代码: //RealTimeChart .java import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.data.time.Millisecond; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; public class RealTimeChart extends ChartPanel implements Runnable { private static TimeSeries timeSeries; private long value=0; public RealTimeCha……

    网友NO.687524

    JFreeChart动态画折线图的方法

    本文实例为大家分享了JFreeChart动态画折线图的具体代码,供大家参考,具体内容如下 每隔一秒画一次,一分钟后重新画 需要的jar包是:gnujaxp.jar,jcommon-1.0.16.jar,jfreechart-1.0.13.jar public class JFreeZheXianTest{ public static XYSeries xyCPUseries = new XYSeries("CPU"); public static int hundroud = 0; public static JFreeChart jfreechart = null; public JPanel getCPUJFreeChart(){ jfreechart = ChartFactory.createXYLineChart( null, null, null, createDataset1(), PlotOrientation.VERTICAL, false, true, false); StandardChartTheme mChartTheme = new StandardChartTheme("CN"); mChartTheme.setLargeFont(new Font("黑体", Font.BOLD, 20)); mChartTheme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 15)); mChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15)); ChartFactory.setChartTheme(mChartTheme); jfreechart.setBorderPaint(new Color(0,204,205)); jfreechart.setBorderVisible(true); XYPlot xyplot = (XYPlot) jfreechart.getPlot(); // Y轴 N……

    <
    1
    >

    Copyright 2018-2020 xz577.com 码农之家

    本站所有电子书资源不再提供下载地址,只分享来路

    版权投诉 / 书籍推广 / 赞助:QQ:520161757