`

JFreeChart生成折线图(生成图片本地保存,有解决中文乱码的通用方法)

阅读更多
package jfreechart;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.RectangleInsets;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.labels.*;
import org.jfree.ui.*;

/**
 * 创建JFreeChart Line Chart(折线图)
 */
public class CopyOfCreateJFreeChartLine {
	public static void main(String[] args) {
		// 步骤1:创建CategoryDataset对象(准备数据)
		TimeSeriesCollection dataset = createDataset();
		// 步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置
		JFreeChart freeChart = createChart(dataset);
		// 步骤3:将JFreeChart对象输出到文件,Servlet输出流等
		saveAsFile(freeChart, "c://jfreechart//testline.png", 500, 300);
	}

	// 创建TimeSeriesCollection对象
	public static TimeSeriesCollection createDataset() {
		TimeSeriesCollection lineDataset = new TimeSeriesCollection();
		TimeSeries timeSeries = new TimeSeries("统计");
		timeSeries.add(new Month(1, 2007), 11200);
		timeSeries.add(new Month(2, 2007), 9000);
		timeSeries.add(new Month(3, 2007), 6200);
		timeSeries.add(new Month(4, 2007), 8200);
		timeSeries.add(new Month(5, 2007), 8200);
		timeSeries.add(new Month(6, 2007), 12200);
		timeSeries.add(new Month(7, 2007), 13200);
		timeSeries.add(new Month(8, 2007), 8300);
		timeSeries.add(new Month(9, 2007), 12400);
		timeSeries.add(new Month(10, 2007), 12500);
		timeSeries.add(new Month(11, 2007), 13600);
		timeSeries.add(new Month(12, 2007), 12500);
		
		TimeSeries timeSeries1 = new TimeSeries("统计1");
		timeSeries1.add(new Month(1, 2007), 112001);
		timeSeries1.add(new Month(2, 2007), 90001);
		timeSeries1.add(new Month(3, 2007), 62001);
		timeSeries1.add(new Month(4, 2007), 82001);
		timeSeries1.add(new Month(5, 2007), 82001);
		timeSeries1.add(new Month(6, 2007), 122001);
		timeSeries1.add(new Month(7, 2007), 132001);
		timeSeries1.add(new Month(8, 2007), 83001);
		timeSeries1.add(new Month(9, 2007), 124001);
		timeSeries1.add(new Month(10, 2007), 125001);
		timeSeries1.add(new Month(11, 2007), 136001);
		timeSeries1.add(new Month(12, 2007), 125001);
		
		lineDataset.addSeries(timeSeries);
		lineDataset.addSeries(timeSeries1);
		return lineDataset;
	}

	// 根据CategoryDataset生成JFreeChart对象
	public static JFreeChart createChart(TimeSeriesCollection lineDataset) {
		JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(
				"统计", 		// 标题
				"月份", 		// categoryAxisLabel (category轴,横轴,X轴的标签)
				"访问量", 	// valueAxisLabel(value轴,纵轴,Y轴的标签)
				lineDataset,// dataset
				true, 		// legend
				true, 		// tooltips
				true); 		// URLs


		// 配置字体(解决中文乱码的通用方法)
		Font xfont = new Font("宋体", Font.PLAIN, 16); // X轴
		Font yfont = new Font("宋体", Font.PLAIN, 16); // Y轴
		Font kfont = new Font("宋体", Font.PLAIN, 14); // 底部
		Font titleFont = new Font("隶书", Font.BOLD, 20); // 图片标题

		jfreechart.setBackgroundPaint(Color.white);
		XYPlot xyplot = (XYPlot) jfreechart.getPlot(); // 获得 plot:XYPlot!

		xyplot.getDomainAxis().setLabelFont(xfont);
		xyplot.getRangeAxis().setLabelFont(yfont);
		jfreechart.getLegend().setItemFont(kfont);
		jfreechart.getTitle().setFont(titleFont);
		
		//设置时间格式,同时也解决了乱码问题
		DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();
		SimpleDateFormat sfd = new SimpleDateFormat("yy-MM");
		dateaxis.setDateFormatOverride(sfd);
		xyplot.setDomainAxis(dateaxis);

		// 以下的设置可以由用户定制,也可以省略
		XYPlot plot = (XYPlot) jfreechart.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);

		return jfreechart;
	}

	// 保存为文件
	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, 350);
			// 保存为JPEG文件
		    //ChartUtilities.writeChartAsJPEG(out, chart, 500, 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
				}
			}
		}
	}

}
分享到:
评论

相关推荐

    java JXL导入导出Excel源码及jfreechart 生成折线图,饼图

    java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图

    JSP利用JFreeChart生成折线图

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

    jfreechart 生成折线图,饼图,柱状图,堆栈柱状图

    JFreeChart是一个流行的Java库,用于生成各种类型的图表,包括折线图、饼图和柱状图,甚至堆栈柱状图。这个压缩包中的"CreateChartServiceImpl.java"文件很可能包含了一个实现这些功能的服务类。 首先,我们要理解...

    Java JFreeChart 后台生成折线图

    Java JFreeChart库是用于创建高质量图表的开源项目,它为Java开发者提供了丰富的图形类型,如折线图、饼图和柱状图等。在Java后台生成这些图表,可以用于数据可视化,帮助用户更好地理解存储在数据库或其他数据源中...

    jfreechart 生成折线图,饼图,柱状图,堆栈柱状图

    标题中提到的“jfreechart生成折线图、饼图、柱状图、堆栈柱状图”是指使用Java的一个开源图形库JFreeChart来创建不同类型的统计图表。JFreeChart是一个功能全面、成熟的Java图表库,广泛应用于各种应用程序中进行...

    jfreechart折线图demo

    最后,使用 `ChartFactory` 类的静态方法,如 `createLineChart()`,生成实际的折线图。 3. **配置图表** JFreeChart 允许开发者自定义图表的许多方面,例如颜色、线条样式、字体、背景色等。此外,还可以添加图例...

    jfreechart_生成折线图,饼图,柱状图,堆栈柱状图

    《使用JFreeChart生成折线图、饼图、柱状图和堆栈柱状图》 JFreeChart是一款强大的开源Java图表库,它允许开发者在应用程序、报告或网页中生成各种高质量的图表,包括折线图、饼图、柱状图和堆栈柱状图等。这篇文档...

    jfreechart部署linux服务器生成图片乱码解决方案

    标题 "jfreechart部署在Linux服务器上生成图片乱码的解决方案" 涉及到的主要知识点是关于Java图形库JFreeChart在Linux环境中的使用,特别是解决中文字符乱码的问题。JFreeChart是一个广泛使用的开源Java库,它允许...

    jfreechart绘制折线图(平面和3D)

    JFreeChart是一款强大的Java图形库,它允许开发者创建多种类型的图表,包括折线图、柱状图、饼图、散点图等。在本主题中,我们将深入探讨如何使用JFreeChart来绘制平面和3D的折线图。 首先,让我们了解折线图的基本...

    java里用JFreeChart画柱状图、折线图、雷达图

    在Java编程环境中,JFreeChart库是一个强大的工具,用于创建各种复杂的图表,包括柱状图、折线图和雷达图。这些图表对于数据可视化和数据分析非常有用,可以帮助开发者直观地展示大量信息。以下是对给定文件中每个...

    jfreechart 堆栈柱状图跟折线图结合拼接

    jfreechart 堆栈柱状图跟折线图结合拼接 jar包请戳http://download.csdn.net/detail/a156435646/7424707

    jfreechart生成图片及导出pdf 、excel

    JFreeChart是一款强大的Java图表库,它允许开发者在应用程序、Swing组件或Web应用中创建各种图表,如柱状图、饼图、折线图等。这个库支持丰富的定制选项,使得图表可以按照用户需求进行个性化设计。在这个...

    jfreechart 漂亮的折线图

    利用jfreechart绘制的漂亮的折线图,实现双纵坐标,折线点标签还带箭头指示,非常直观,需要提前下载jfreechart.jar文件,否则我的类会报错,也即是要配置运行环境

    JFreeChart 折线、柱状组合图

    public JFreeChart createChart(String Ytitle, String title, CategoryDataset lineData, CategoryDataset barData) { //参考附件 return chart; } //struts 部分 <!--begin 维优特例 --> ...

    JfreeChart画双Y轴折线图

    在Java编程领域,JFreeChart是一个非常流行的图表库,它允许开发者创建各种复杂的数据可视化图形,包括折线图、柱状图、饼图等。在本篇博客中,"JfreeChart画双Y轴折线图"的主题,将探讨如何使用JFreeChart库来创建...

    JFreeChart画折线实例

    在这个"JFreeChart画折线实例"中,我们将深入探讨如何利用JFreeChart库来创建折线图,并将其保存为本地文件。下面将详细讲解相关知识点。 首先,JFreeChart库的引入是通过在项目中添加其对应的依赖或jar包。如果你...

    JFreeChart双Y轴折线图实例,可以直接运行

    JFreeChart双Y轴折线图实例,可以直接运行,实例类为LineChartDemo1.JAVA,有注释。 若想在web工程使用只需如下。 String filename = ServletUtilities.saveChartAsPNG(jfreechart, 600, 400, null, session); ...

    jfreechart 折线图 应用

    该程序为main 函数,定义了三个方法,分别是jfreechart三种实现折线图的类型,返回的是一个chart 本程序是把图片保存到本地,当然实际应用中,只要在程序和页面中做相关配置即可以使用。 因为图片带点透明,所以...

Global site tag (gtag.js) - Google Analytics