`
jimmy.shine
  • 浏览: 396154 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jFreechart三种图的测试代码

阅读更多

Jfreechart的最新版本,对于中文默认是不支持的,因为默认的font为英文的,所以需要单独设置。以前一直诟病于jfreechart的生成的图形颜色不好看,图片不清晰,现在新版本已经好了很多了,至于图形的颜色,可以自定义。

 

三种常见的图代码。

 

/**
 * copyRight vaalhaai.com
 */
package com.vaalhaai.framework.report.chart;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontFormatException;
import java.io.IOException;
import java.text.NumberFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
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.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
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.BarRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.TextAnchor;

/**
 * @author Jimmy.Shine 2010-5-9
 * 
 */
public class ChartTest {

	/**
	 * @param args
	 * @throws IOException
	 * @throws FontFormatException
	 */
	public static void main(String[] args) throws FontFormatException, IOException {
	//	pie3D();
	//	bar3D();
		line();
	}
	
	public static void pie3D(){

		DefaultPieDataset dataset = new DefaultPieDataset();
		dataset.setValue("中国电信", 30);
		dataset.setValue("中国移动", 60);
		dataset.setValue("中国联通", 10);
		dataset.setValue("固定电话", 40);
		dataset.setValue("其它", 20);

		JFreeChart chart = ChartFactory.createPieChart3D("通信分布饼图", dataset, true, true, false);
		TextTitle title = chart.getTitle();
		title.setFont(new Font("黑体", Font.BOLD, 18));
		LegendTitle legendTitle = chart.getLegend();
		legendTitle.setItemFont(new Font("微软雅黑", Font.BOLD, 12));
		PiePlot3D plot = (PiePlot3D) chart.getPlot();
		plot.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		plot.setLabelBackgroundPaint(new Color(255, 255, 255));
		plot.setBackgroundPaint(new Color(255, 255, 255));
		plot.setOutlineVisible(true);
		plot.setBackgroundAlpha(0.75F);
		plot.setForegroundAlpha(0.80F);
		plot.setStartAngle(90);
		//int r = 61, g = 89, b = 171;
		int r = 20, g = 20, b = 20;
		int rStep = 30;
		int gStep = 30;
		int bStep = 30;
		plot.setSectionPaint("中国电信", new Color(r, g, b));
		r = (r + rStep > 255 ? r : r + rStep);
		g = (g + gStep > 255 ? g : g + gStep);
		b = (b + bStep > 255 ? b : b + bStep);
		plot.setSectionPaint("中国移动", new Color(r, g, b));
		r = (r + rStep > 255 ? r : r + rStep);
		g = (g + gStep > 255 ? g : g + gStep);
		b = (b + bStep > 255 ? b : b + bStep);
		plot.setSectionPaint("中国联通", new Color(r, g, b));
		r = (r + rStep > 255 ? r : r + rStep);
		g = (g + gStep > 255 ? g : g + gStep);
		b = (b + bStep > 255 ? b : b + bStep);
		plot.setSectionPaint("固定电话", new Color(r, g, b));
		r = (r + rStep > 255 ? r : r + rStep);
		g = (g + gStep > 255 ? g : g + gStep);
		b = (b + bStep > 255 ? b : b + bStep);
		plot.setSectionPaint("其它", new Color(r, g, b));

		plot.setDarkerSides(true);
		plot.setShadowPaint(new Color(0, 0, 255));

		plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({2})"));
		plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1}/{3}={2})"));
		// plot.setExplodePercent("中国电信", 0.3F);
		// plot.setExplodePercent("中国移动", 0.3F);
		// plot.setExplodePercent("中国联通", 0.3F);
		// plot.setExplodePercent("固定电话", 0.3F);
		
		ChartFrame frame = new ChartFrame("通信 ", chart);
		frame.pack();
		frame.setVisible(true);
	}
	
	public static void bar3D(){
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(30, "移动通信", "中国电信");
		dataset.addValue(60, "移动通信", "中国移动");
		dataset.addValue(10, "移动通信", "中国联通");
		dataset.addValue(40, "固定通信", "中国电信");
		dataset.addValue(-10, "固定通信", "中国移动");
		dataset.addValue(20, "固定通信", "中国联通");
		

		JFreeChart chart = ChartFactory.createBarChart3D("通信分布柱状图", "类别", "值", dataset,PlotOrientation.VERTICAL, true, true, false);
		TextTitle title = chart.getTitle();
		title.setFont(new Font("黑体", Font.BOLD, 18));
		LegendTitle legendTitle = chart.getLegend();
		legendTitle.setItemFont(new Font("微软雅黑", Font.BOLD, 12));
		CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.setBackgroundPaint(new Color(255, 255, 255));
		plot.setOutlineVisible(true);
		plot.setBackgroundAlpha(0.75F);
		plot.setForegroundAlpha(0.80F);
		plot.setRangeGridlinesVisible(true);
		plot.setRangeGridlinePaint(Color.GRAY);
		
		CategoryAxis3D xAxis = (CategoryAxis3D) plot.getDomainAxis();
		xAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		xAxis.setTickLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		
		ValueAxis yAxis = plot.getRangeAxis();
		yAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		yAxis.setTickLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		
		BarRenderer render = (BarRenderer) plot.getRenderer();
		render.setBaseItemLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		render.setBaseLegendTextFont(new Font("微软雅黑", Font.BOLD, 12));
		render.setMaximumBarWidth(0.1F);
		render.setItemMargin(0.0F);
		render.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{3}",NumberFormat.getInstance()));
		render.setBaseItemLabelsVisible(true);
		render.setItemLabelAnchorOffset(8);
		render.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT));
		render.setBaseNegativeItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT));
/*
		ValueMarker marker = new ValueMarker(0.70, new Color(200, 200, 255), 
                new BasicStroke(1.0f), new Color(200, 200, 255), 
                new BasicStroke(1.0f), 1.0f);
		plot.addRangeMarker(marker);
*/	
  /*      GradientPaint gp0 = new GradientPaint(
                0.0f, 0.0f, Color.blue, 
                0.0f, 0.0f, new Color(0, 0, 64)
            );
            GradientPaint gp1 = new GradientPaint(
                0.0f, 0.0f, Color.green, 
                0.0f, 0.0f, new Color(0, 64, 0)
            );
            GradientPaint gp2 = new GradientPaint(
                0.0f, 0.0f, Color.red, 
                0.0f, 0.0f, new Color(64, 0, 0)
            );
            render.setSeriesPaint(0, gp0);
            render.setSeriesPaint(1, gp1);
            render.setSeriesPaint(2, gp2);
*/
		int r = 20, g = 20, b = 20;
		int rStep = 120;
		int gStep = 120;
		int bStep = 120;
		render.setSeriesPaint(0, new Color(r,g,b));
		r = (r + rStep > 255 ? r : r + rStep);
		g = (g + gStep > 255 ? g : g + gStep);
		b = (b + bStep > 255 ? b : b + bStep);		
		render.setSeriesPaint(1, new Color(r,g,b));


		
		ChartFrame frame = new ChartFrame("通信 ", chart);
		frame.pack();
		frame.setVisible(true);
	}

	public static void line(){
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(30, "通信", "中国电信");
		dataset.addValue(60, "通信", "中国移动");
		dataset.addValue(10, "通信", "中国联通");
		dataset.addValue(40, "通信", "中国电信固话");
		dataset.addValue(10, "通信", "其它固话");
		dataset.addValue(20, "通信", "中国联通固话");

		dataset.addValue(30, "3G", "中国电信");
		dataset.addValue(50, "3G", "中国移动");
		dataset.addValue(20, "3G", "中国联通");
		dataset.addValue(50, "3G", "中国电信固话");
		dataset.addValue(30, "3G", "其它固话");
		dataset.addValue(20, "3G", "中国联通固话");

		JFreeChart chart = ChartFactory.createLineChart("通信分布线图", "类别", "值", dataset,PlotOrientation.VERTICAL, true, true, false);
		TextTitle title = chart.getTitle();
		title.setFont(new Font("黑体", Font.BOLD, 18));
		LegendTitle legendTitle = chart.getLegend();
		legendTitle.setItemFont(new Font("微软雅黑", Font.BOLD, 12));

		CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.setBackgroundPaint(new Color(255, 255, 255));
		plot.setOutlineVisible(true);
		plot.setBackgroundAlpha(0.75F);
		plot.setForegroundAlpha(0.80F);
		plot.setRangeGridlinesVisible(true);
		plot.setRangeGridlinePaint(Color.GRAY);
		
		CategoryAxis xAxis = (CategoryAxis) plot.getDomainAxis();
		xAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		xAxis.setTickLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		
		NumberAxis yAxis = (NumberAxis)plot.getRangeAxis();
		yAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		yAxis.setTickLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		yAxis.setStandardTickUnits(NumberAxis3D.createIntegerTickUnits());
		
		LineAndShapeRenderer render = (LineAndShapeRenderer) plot.getRenderer();
		render.setBaseItemLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		render.setBaseLegendTextFont(new Font("微软雅黑", Font.BOLD, 12));
		render.setItemMargin(0.0F);
		render.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",NumberFormat.getInstance()));
		render.setBaseItemLabelsVisible(true);
		render.setBaseLinesVisible(true);
		render.setBaseSeriesVisibleInLegend(true);
		render.setBaseSeriesVisible(true);
		render.setBaseShapesVisible(true);
		render.setItemLabelAnchorOffset(2);
		render.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE2,TextAnchor.BASELINE_LEFT));
		render.setBaseNegativeItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE2,TextAnchor.BASELINE_LEFT));
		
		int r = 61, g = 89, b = 171;
		int rStep = 120;
		int gStep = 120;
		int bStep = 120;
		render.setSeriesPaint(0, new Color(r,g,b));
		r = (r + rStep > 255 ? r : r + rStep);
		g = (g + gStep > 255 ? g : g + gStep);
		b = (b + bStep > 255 ? b : b + bStep);		
		render.setSeriesPaint(1, new Color(r,g,b));		
		
		ChartFrame frame = new ChartFrame("通信 ", chart);
		frame.pack();
		frame.setVisible(true);
	}
}

 效果见附件

  • 大小: 27.7 KB
  • 大小: 15.6 KB
  • 大小: 25 KB
分享到:
评论

相关推荐

    JFreeChart生成柱形图完整测试代码

    JFreeChart生成柱形图完整测试代码 放在普通项目里运行main方法就能生成柱形图 不需要添加任何代码 可根据自己需要修改参数

    JFreeChart 测试代码

    **JFreeChart 测试代码详解** JFreeChart 是一个用于Java平台的开源图表库,它提供了丰富的图表类型,包括柱状图、饼图、线形图、散点图、甘特图等,常用于数据分析和可视化展示。这篇测试代码旨在演示JFreeChart库...

    jfreechart图表工程,可以导入测试

    标题中的“jfreechart图表工程,可以导入测试”表明这是一个包含 JFreeChart 实例代码和测试的项目,可以帮助开发者了解如何在自己的项目中集成和使用 JFreeChart。 **1. JFreeChart 的基本概念** JFreeChart 支持...

    jfreechart源代码【附详细中文注释、注释到每个变量和方法】

    JFreeChart是一款强大的Java图表库,它为开发者提供了一种简单的方式来创建各种复杂的统计图表,如折线图、柱状图、饼图等。这款开源库广泛应用于数据分析、报告生成和可视化应用中。源代码附带了详尽的中文注释,对...

    JfreeChart 1.0.10 demo 源代码

    在标题和描述中提到的"JfreeChart 1.0.10 demo 源代码"是一份包含了示例和测试代码的资源,对于学习和理解如何使用JFreeChart库来构建图表非常有帮助。 1. **JFreeChart基本结构**:JFreeChart的核心组件包括`...

    JFreeChart实例

    "JFreeChartTest"这个文件可能是项目的测试类或者示例代码,它可能包含了如何在Struts 2环境中使用JFreeChart的示例,包括创建不同类型的图表以及返回图表图像流的逻辑。 总的来说,JFreeChart结合Struts 2可以...

    使用jfreechart显示图片,具体的

    本教程将详细讲解如何在Struts2框架中使用JFreeChart来显示图片。 首先,我们需要了解JFreeChart的基本用法。JFreeChart提供了丰富的API,可以方便地创建和定制图表。以下是一般步骤: 1. **创建图表对象**:例如...

    如何在eclipse中配置JFreeChart

    测试代码的编写需要创建一个Java类,然后在该类中通过JFreeChart提供的API来生成一个图表,并将图表保存为图片文件。如果运行测试代码后,在D盘下成功生成了名为PieChart.jpg的图片文件,那么表明JFreeChart已经可以...

    jfreechart中文学习文档

    安装完成后,可以通过运行演示应用程序来测试 JFreeChart 是否正确安装。 **3.5 在 IDE 中配置 JFreeChart** 针对 Eclipse 和 NetBeans 提供了详细的配置步骤,帮助用户快速集成 JFreeChart。 **3.6 编译源代码**...

    jfreechart的使用-柱状图

    4. **TestJfreeChart.java**:这显然是一个测试文件,用于演示或验证jFreeChart库创建柱状图的代码。 5. **DataStatModel.java**:这可能是博主定义的数据模型类,用于存储和处理数据,这些数据将被用来创建柱状图。...

    JFreeChart示例

    在"JFreeChartTest"这个文件中,我们可以期待找到一些测试代码或者完整的示例应用。这些代码可能包括创建不同类型的图表,设置图例、轴标签、数据源,以及如何将图表嵌入到Web应用中。在Java Web环境中,通常会使用...

    jfreechart所需jar包.zip

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,包括折线图、柱状图、饼图、散点图等。在Java应用程序中,JFreeChart经常被用于数据分析和可视化,尤其在报表系统、数据分析工具或者任何需要...

    jfreechart的封装用例

    通过以上介绍,我们可以看出,这个封装后的 JFreeChart 示例提供了一种高效的方式来创建和展示各种类型的图表,尤其是在 Java Web 开发场景下。通过测试 Servlet,开发者可以快速地在网页上预览图表效果,提高了开发...

    JFreeChart使用教程(含下载、安装)

    JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。本文将通过引领...

    applet_+_JfreeChart_实现曲线走势图

    JFreeChart是Java的一个强大的图形库,它提供了丰富的图表类型,包括线图、柱状图、饼图等,非常适合用于数据可视化。本项目结合Applet和JFreeChart,目的是实现在网页上动态展示曲线走势图。 首先,理解Applet的...

    jfreechart-1.0.9

    5. 测试代码:用于验证库的功能,也可以作为学习库如何工作的参考。 在实际应用中,JFreeChart可以与其他Java库如Swing或JavaFX结合,创建出交互式的桌面应用程序。此外,由于JFreeChart是纯Java实现,因此它也适用...

    Spring+JFreeChart 自动生成统计图

    1. **依赖注入(Dependency Injection, DI)**:通过反转控制,使得对象之间的依赖关系不再硬编码,而是通过配置文件或注解来实现,提高了代码的可测试性和可维护性。 2. **面向切面编程(Aspect-Oriented ...

    jFreeChart1.0.15

    这个压缩包可能还包含了示例代码或者测试用例,帮助开发者了解如何实际操作和自定义图表。 值得注意的是,描述中提到了“开发文档是收费的”。这表明尽管基本的API文档和安装指南是免费提供的,但更详细的开发文档...

Global site tag (gtag.js) - Google Analytics