使用jfreechart生成柱状图、折线图、和饼状图

JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。下面我就详细介绍如何使用jfreechart生成柱状图、折线图、和饼状图。

步骤:

①、导入其相应的jcommon-1.0.16.jar和jfreechart-1.0.13.jar文件(可点击下载

②、下面就可以写实现各种图形的代码了

A、生成柱状图:

<span style="font-size:18px;">package com.whp.test;

import java.awt.Font;
import java.io.File;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis3D;
import org.jfree.chart.axis.NumberAxis3D;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.DefaultCategoryDataset;

public class jfreeChart {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DefaultCategoryDataset dataset=new DefaultCategoryDataset();
		//添加数据
		dataset.addValue(98, "数学", "张三");
		dataset.addValue(87, "语文", "张三");
		dataset.addValue(68, "数学", "李四");
		dataset.addValue(89, "语文", "李四");
		dataset.addValue(56, "数学", "王五");
		dataset.addValue(96, "语文", "王五");
		
		JFreeChart chart=ChartFactory.createBarChart3D(
				"成绩统计表",
				"学生姓名",//X轴的标签 
                "分数",//Y轴的标签 
                dataset, //图标显示的数据集合
                PlotOrientation.VERTICAL, //图像的显示形式(水平或者垂直)
                true,//是否显示子标题 
                true,//是否生成提示的标签 
                true); //是否生成URL链接		
		       //处理图形上的乱码
				//处理主标题的乱码
				chart.getTitle().setFont(new Font("宋体",Font.BOLD,18));
				//处理子标题乱码
				chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,15));
				//获取图表区域对象
				CategoryPlot categoryPlot = (CategoryPlot)chart.getPlot();
				//获取X轴的对象
				CategoryAxis3D categoryAxis3D = (CategoryAxis3D)categoryPlot.getDomainAxis();
				//获取Y轴的对象
				NumberAxis3D numberAxis3D = (NumberAxis3D)categoryPlot.getRangeAxis();
				//处理X轴上的乱码
				categoryAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15));
				//处理X轴外的乱码
				categoryAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15));
				//处理Y轴上的乱码
				numberAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15));
				//处理Y轴外的乱码
				numberAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15));
				//处理Y轴上显示的刻度,以10作为1格
				numberAxis3D.setAutoTickUnitSelection(false);
				NumberTickUnit unit = new NumberTickUnit(10);
				numberAxis3D.setTickUnit(unit);
				//获取绘图区域对象
				BarRenderer3D barRenderer3D = (BarRenderer3D)categoryPlot.getRenderer();
				//设置柱形图的宽度
				barRenderer3D.setMaximumBarWidth(0.07);
				//在图形上显示数字
				barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
				barRenderer3D.setBaseItemLabelsVisible(true);
				barRenderer3D.setBaseItemLabelFont(new Font("宋体",Font.BOLD,15));
				
				//在D盘目录下生成图片
				File file = new File("chart.jpeg");
				try {
					ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);
				} catch (IOException e) {
					e.printStackTrace();
				}
				
				//使用ChartFrame对象显示图像
				ChartFrame frame = new ChartFrame("xyz",chart);
				frame.setVisible(true);
				frame.pack();
	}

}
</span>
结果:



B、生成折线图

package com.whp.test;

import java.awt.Font;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryAxis3D;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberAxis3D;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;

public class jfreeChart1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		// 添加数据
		dataset.addValue(98, "数学", "张三");
		dataset.addValue(68, "数学", "李四");
		dataset.addValue(56, "数学", "王五");

		JFreeChart chart = ChartFactory.createLineChart("用户统计报表(所属单位)", // 主标题的名称
				"所属单位名称",// X轴的标签
				"数量",// Y轴的标签
				dataset, // 图标显示的数据集合
				PlotOrientation.VERTICAL, // 图像的显示形式(水平或者垂直)
				true,// 是否显示子标题
				true,// 是否生成提示的标签
				true); // 是否生成URL链接
		// 处理图形上的乱码
		// 处理主标题的乱码
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
		// 处理子标题乱码
		chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
		// 获取图表区域对象
		CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
		// 获取X轴的对象
		CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();
		// 获取Y轴的对象
		NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();
		// 处理X轴上的乱码
		categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
		// 处理X轴外的乱码
		categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
		// 处理Y轴上的乱码
		numberAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
		// 处理Y轴外的乱码
		numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
		// 处理Y轴上显示的刻度,以10作为1格
		numberAxis.setAutoTickUnitSelection(false);
		NumberTickUnit unit = new NumberTickUnit(10);
		numberAxis.setTickUnit(unit);
		// 获取绘图区域对象
		LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot
				.getRenderer();
		// 在图形上显示数字
		lineAndShapeRenderer
				.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		lineAndShapeRenderer.setBaseItemLabelsVisible(true);
		lineAndShapeRenderer
				.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
		// 在图形上添加转折点(使用小矩形显示)
		Rectangle shape = new Rectangle(10, 10);
		lineAndShapeRenderer.setSeriesShape(0, shape);
		lineAndShapeRenderer.setSeriesShapesVisible(0, true);

		//在D盘目录下生成图片
		File file = new File("chart1.jpg");
		try {
			ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 使用ChartFrame对象显示图像
		ChartFrame frame = new ChartFrame("xyz", chart);
		frame.setVisible(true);
		frame.pack();
	}

}

结果:


C、生成饼图:

package com.whp.test;

import java.awt.Font;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryAxis3D;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberAxis3D;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

public class jfreeChart3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DefaultPieDataset dataset = new DefaultPieDataset();
		//添加数据
		dataset.setValue("张三",40);
		dataset.setValue("李四",32);
		dataset.setValue("王五",28);
		JFreeChart chart = ChartFactory.createPieChart3D("比重统计报表(所属单位)", //主标题的名称
				                      dataset, //图标显示的数据集合
				                      true,//是否显示子标题 
				                      true,//是否生成提示的标签 
				                      true); //是否生成URL链接
		//处理图形上的乱码
		//处理主标题的乱码
		chart.getTitle().setFont(new Font("宋体",Font.BOLD,18));
		//处理子标题乱码
		chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,15));
		//获取图表区域对象
		PiePlot3D categoryPlot = (PiePlot3D)chart.getPlot();
		//处理图像上的乱码
		categoryPlot.setLabelFont(new Font("宋体",Font.BOLD,15));
		//设置图形的生成格式为(上海 2 (10%))
		String format = "{0} {1} ({2})";
		categoryPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(format));
		
		//在D盘目录下生成图片
		File file = new File("chart2.jpg");
		try {
			ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);
		} catch (IOException e) {
			e.printStackTrace();
		}
		//使用ChartFrame对象显示图像
		ChartFrame frame = new ChartFrame("xyz",chart);
		frame.setVisible(true);
		frame.pack();
	}

}

结果:





  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Happy编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值