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;
 }
} 

运行结果:

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

(0)

相关推荐

  • JFreeChart实现实时曲线图

    最近要用到实时曲线图,在网上大概找了一下,有两种实现方式,一种就是JFreeChart的官方实例MemoryUsageDemo.java.通过一个实现java.Swing.Timer的内部类,在其监听器中将实时数据添加进TimeSeries,由于Timer是会实时执行的,所以这个方法倒是没有什么问题,可以参考代码. 另一种方式就是将实时类实现Runnable接口,在其run()方法中,通过无限循环将实时数据添加进TimeSeries,下面是较简单的实现代码: //RealTimeChart .j

  • 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

  • jfreechart插件将数据展示成饼状图、柱状图和折线图

    本文以展示柱状图为例进行介绍,当然这仅仅是一种方法而已:还有很多方法可以用于展示图表,例如自定义图表标签.使用jfreechart插件等: 1.导入js文件,包含了很多展示方法: 复制代码 代码如下: <script type="text/javascript" src=<select:link page="/js/ChartObject.js"/>></script> <script type="text/jav

  • 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; p

  • JFreeChart插件实现的折线图效果实例

    本文实例讲述了JFreeChart插件实现的折线图效果.分享给大家供大家参考,具体如下: package com.lei.jfreechart; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; imp

  • JFreeChart简单实现光滑曲线绘制

    用JFreeChart绘制光滑曲线,利用最小二乘法数学原理计算,供大家参考,具体内容如下 绘制图形: 代码: FittingCurve.java package org.jevy; import java.util.ArrayList; import java.util.List; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; i

  • jfreechart画折线图的方法

    JFreeChart 是开放源代码站点SourceForge.net 上的一个 JAVA 项目,它主要用来各种各样的图表,这些图表包括:饼图.柱状图 ( 普通柱状图以及堆栈柱状图 ).线图.区域图.分布图.混合图.甘特图以及一些仪表盘等等. 应用jfreechart来画图需要两个jar包:jfreechart.jar和jcommon.jar,下载地址. 下面是一个画折线图的例子: package yuth.jfree.demo; /** * 使用 categoryDataset 数据集创建折线图

  • jqplot通过ajax动态画折线图的方法及思路

    效果如图所示,每个五秒钟图会移动一次(其实是重新画了一张图),能显示所监控的cpu信息. pastCpuInfomation函数主要用来显示一张折线图 updateCpuPic函数把5秒前的图去掉,重新根据现有数据画一张图. updateCpuInfomation函数 把最新的点加入存储折线的数组中 再接着在界面中弄两个定时器,让他们每个5秒执行一次updateCpuPic,每个1分钟执行一次updateCpuInfomation,图画就动起来了. PS:代码中执行好多操作前都会在服务器中获取下

  • 基于mpvue小程序使用echarts画折线图的方法示例

    第一次使用mpvue框架来写小程序,项目开发直接搬用mpvue-shop(一个仿网易严选的小程序开发项目),项目结构清楚,实现了大部分功能,对于初次使用mpvue的小伙伴们来说,是一个很好的选择. 关于组件的选择: 1.echarts-for-weixin,官方echarts的小程序版本.使用参考:echarts-for-weixin介绍,如果你是原生开发小程序版本,这个组件非常适合你,开发过程中可使用echarts官方提供的所有配置和Api,但并不适合mpvue项目. 2.wx-charts,

  • Python读取Excel表格,并同时画折线图和柱状图的方法

    今日给大家分享一个Python读取Excel表格,同时采用表格中的数值画图柱状图和折线图,这里只需要几行代码便可以实. 首先我们需要安装一个Excel操作的库xlrd,这个很简单,在安装Python后直接在DOS命令下输入pip install xlrd,便可以安装成功,如果还是不行,就输入Python -m pip install xlrd.后面会附上完整的代码和截图: 这行代码就是读取本地Excel文件的: data = xlrd.open_workbook(r'C:\\Users\\ASU

  • Python基于Matplotlib库简单绘制折线图的方法示例

    本文实例讲述了Python基于Matplotlib库简单绘制折线图的方法.分享给大家供大家参考,具体如下: Matplotlib画折线图,有一些离散点,想看看这些点的变动趋势: import matplotlib.pyplot as plt x1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] y1=[30,31,31,32,33,35,35,40,47,62,99,186,480] x2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1

  • JavaWeb实现图形报表折线图的方法

    本文实例讲述了JavaWeb实现图形报表折线图的方法.分享给大家供大家参考,具体如下: 步骤说明: 1. 导入log4j.jar,jfreechart-0.9.18.jar,jdom.jar,jcommon-0.9.3.jar四个jar包 2. 在某个包中写入Tuxin.Java类 package com.mengya.util; import java.awt.Color; import java.awt.Font; import java.io.PrintWriter; import jav

  • Android开发自定义控件之折线图实现方法详解

    本文实例讲述了Android开发自定义控件之折线图实现方法.分享给大家供大家参考,具体如下: 前言 折线图是Android开发中经常会碰到的效果,但由于涉及自定义View的知识,对许多刚入门的小白来说会觉得很高深.其实不然,接下来我就以尽量通俗的语言来说明下图折线图效果的实现过程. 效果图 实现过程 首先,选择自定义控件的方式. 自定义控件的实现有四种方式: 1.继承View,重写onDraw.onMeasure等方法. 2.继承已有的View(比如TextView). 3.继承ViewGrou

  • jQuery实现折线图的方法

    本文实例讲述了jQuery实现折线图的方法.分享给大家供大家参考.具体如下: 效果图如下所示: js引用: 复制代码 代码如下: <script src="Js/Index/jquery-1.5.2.min.js" type="text/javascript"></script>  <script src="js/Index/raphael.2.1.0.min.js" type="text/javascri

  • Layer+Echarts构建弹出层折线图的方法

    layer是一款口碑极佳的web弹层组件,她具备全方位的解决方案,致力于服务各个水平段的开发人员,您的页面会轻松地拥有丰富而友好的操作体验. 在中国可视化生态系统中,ECharts 通过提供方便丰富的可视化图表,极大缩短了用户与数据的距离.个人认为是最好用的可用来生成图表的插件. 现在使用Layer和Echarts构建弹出层折线图. 下载好所需要用到的工具包,Echarts下载为echarts.min.js,Layer在layer官网下载之后将layer文件夹放到项目之中. 在HTML文件中引入

随机推荐