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

JFreeChart柱状图单组柱子的不同颜色显示

 
阅读更多

JFreeChart柱状图中单组柱子用不同颜色来显示的实现方法是自定义一个Renderer来继承BarRenderer类,然后重载getItemPaint(int i,int j)方法。

实现效果如下:

实现代码如下:

public class CustomRenderer extends org.jfree.chart.renderer.category.BarRenderer {

	/**
	 * 
	 */
	private static final long serialVersionUID = 784630226449158436L;
	private Paint[] colors;
	//初始化柱子颜色
	private String[] colorValues = { "#AFD8F8", "#F6BD0F", "#8BBA00", "#FF8E46", "#008E8E", "#D64646" };

	public CustomRenderer() {
		colors = new Paint[colorValues.length];
		for (int i = 0; i < colorValues.length; i++) {
			colors[i] = Color.decode(colorValues[i]);
		}
	}

	//每根柱子以初始化的颜色不断轮循
	public Paint getItemPaint(int i, int j) {
		return colors[j % colors.length];
	}
}

public class CreateJFreeChartBarColor {

	/**
	 * 创建JFreeChart Bar 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:\\bar.png", 500, 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, weight, height);
			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 jfreechart = ChartFactory.createBarChart("学生统计图", // 标题
				"学生姓名", // categoryAxisLabel (category轴,横轴,X轴的标签)
				"年龄", // valueAxisLabel(value轴,纵轴,Y轴的标签)
				categoryDataset, // dataset
				PlotOrientation.VERTICAL, false, // legend
				false, // tooltips
				false); // URLs

		Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);

		jfreechart.setTextAntiAlias(false);
		jfreechart.setBackgroundPaint(Color.white);

		CategoryPlot plot = jfreechart.getCategoryPlot();// 获得图表区域对象

		// 设置横虚线可见
		plot.setRangeGridlinesVisible(true);
		// 虚线色彩
		plot.setRangeGridlinePaint(Color.gray);
		// 数据轴精度
		NumberAxis vn = (NumberAxis) plot.getRangeAxis();
		// vn.setAutoRangeIncludesZero(true);
		DecimalFormat df = new DecimalFormat("#0.0");
		vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式

		// x轴设置
		CategoryAxis domainAxis = plot.getDomainAxis();
		domainAxis.setLabelFont(labelFont);// 轴标题
		domainAxis.setTickLabelFont(labelFont);// 轴数值
		// Lable(Math.PI/3.0)度倾斜
		// domainAxis.setCategoryLabelPositions(CategoryLabelPositions
		// .createUpRotationLabelPositions(Math.PI / 3.0));
		domainAxis.setMaximumCategoryLabelWidthRatio(6.00f);// 横轴上的 Lable
		// 是否完整显示

		// 设置距离图片左端距离
		domainAxis.setLowerMargin(0.1);
		// 设置距离图片右端距离
		domainAxis.setUpperMargin(0.1);
		// 设置 columnKey 是否间隔显示
		// domainAxis.setSkipCategoryLabelsToFit(true);
		plot.setDomainAxis(domainAxis);
		// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)
		plot.setBackgroundPaint(new Color(255, 255, 204));

		// y轴设置
		ValueAxis rangeAxis = plot.getRangeAxis();
		rangeAxis.setLabelFont(labelFont);
		rangeAxis.setTickLabelFont(labelFont);
		// 设置最高的一个 Item 与图片顶端的距离
		rangeAxis.setUpperMargin(0.15);
		// 设置最低的一个 Item 与图片底端的距离
		rangeAxis.setLowerMargin(0.15);
		plot.setRangeAxis(rangeAxis);

		// 解决中文乱码问题(关键)
		TextTitle textTitle = jfreechart.getTitle();
		textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
		domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
		domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
		vn.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
		vn.setLabelFont(new Font("黑体", Font.PLAIN, 12));
		// jfreechart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));

		// 使用自定义的渲染器
          CustomRenderer renderer = new CustomRenderer();
		// 设置柱子宽度
		renderer.setMaximumBarWidth(0.2);
		// 设置柱子高度
		renderer.setMinimumBarLength(0.2);
		// 设置柱子边框颜色
		renderer.setBaseOutlinePaint(Color.BLACK);
		// 设置柱子边框可见
		renderer.setDrawBarOutline(true);
		// 设置每个地区所包含的平行柱的之间距离
		renderer.setItemMargin(0.5);
		jfreechart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
		// 显示每个柱的数值,并修改该数值的字体属性
		renderer.setIncludeBaseInRange(true);
		renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		renderer.setBaseItemLabelsVisible(true);
		plot.setRenderer(renderer);
		// 设置柱的透明度
		plot.setForegroundAlpha(1.0f);

		// 背景色 透明度
		plot.setBackgroundAlpha(0.5f);

		return jfreechart;
	}

	// 创建CategoryDataset对象
	public static CategoryDataset createDataset() {
		double[][] data = new double[][] { { 25, 24, 40, 12, 33, 33 } };
		String[] rowKeys = { "" };
		String[] columnKeys = { "张三", "李四", "王五", "马六", "陈七", "赵八" };
		CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
		return dataset;
	}

}



分享到:
评论

相关推荐

    JFreeChart让单组柱子显示不同的颜色的办法

    当我们需要创建一个柱状图,并且希望在同一组数据中,每根柱子显示不同的颜色时,JFreeChart提供了灵活的配置方式来实现这一需求。下面我们将详细探讨如何利用JFreeChart让单组柱子显示不同的颜色。 首先,我们需要...

    jfreechart生成单组3D变色柱状图

    根据给定的信息,本文将详细解释如何使用JFreeChart库生成单组3D变色柱状图,并确保每个柱子的颜色不同。此方法对于需要在报告、数据分析或可视化项目中展示数据时非常有用。 ### 一、理解标题与描述 #### 1.1 ...

    自定义JFreeChart柱状图的详细说明

    综上所述,自定义JFreeChart柱状图涉及了数据准备、渲染器配置、外观调整、标签和提示信息等多个方面。通过深入理解这些知识点,开发者可以创建出满足各种需求的个性化柱状图。提供的文件如"JFreeChart中柱状图的...

    java制作jfreechart柱状图 饼状图 折线图

    Java中的JFreeChart库是一个强大的工具,用于生成各种类型的图表,包括柱状图、饼状图和折线图。在本教程中,我们将深入探讨如何使用JFreeChart创建这些图表,以及如何用随机生成的数据作为数据源。 首先,...

    jfreechart实现柱状图排序

    在日常的数据分析与展示工作中,柱状图是非常常见的一种图表类型,它能直观地显示不同类别之间的数值差异。JFreeChart 是一款基于 Java 的开源图表绘制工具,它提供了丰富的图表类型和高度定制化的选项。但在实际...

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

    JFreeChart 是一个开源的Java库,用于生成高质量的2D图表,如折线图、饼图、柱状图和堆栈柱状图等。它广泛应用于数据分析、报告和应用程序中,提供丰富的自定义选项来满足各种视觉需求。在本项目中,你将找到能够...

    JFreeChart设置柱状图的宽度

    JFreeChart设置柱状图的宽度,当一个元素时不让显示那么宽。

    JFreeChart柱状图资料

    JFreeChart允许你对柱状图进行高度定制,包括改变颜色、添加渐变色、调整标签样式、修改轴的刻度线和标签、设置图例样式等。此外,还可以通过`Renderer`接口来实现更复杂的定制,比如设置柱状图的透明度和宽度。 5...

    jfreechart 柱状图、曲线图、饼图经

    JFreeChart是一款强大的Java图形库,它为开发者提供了丰富的图表类型,包括柱状图、曲线图和饼图等,使得在Java应用中展示数据变得更加直观和美观。在本篇文章中,我们将深入探讨如何利用JFreeChart来创建这些图表,...

    JFreeChart画统计分析柱状图

    ### JFreeChart绘制统计分析柱状图详解 #### 一、引言 在现代数据分析领域,图表作为一种直观的视觉表达工具,在展现数据特征与趋势方面起着至关重要的作用。其中,柱状图作为最常见的图表类型之一,被广泛应用于...

    jfreechart生成单组柱图不同颜色

    本篇将详细讲解如何利用JFreeChart生成单组柱图并实现不同颜色显示以及在每个柱的顶端显示数值。 首先,我们要创建一个自定义的渲染器。根据提供的描述,我们需要定义一个名为`CustomBarRenderer`的类,它继承自`...

    JFreeChart 让X轴的标题竖着显示

    在Java编程环境中,JFreeChart库是一个非常强大的工具,用于创建各种类型的图表,如柱状图、饼图、线图等。如果你需要让X轴的标题在图表中竖直显示,而不是默认的水平显示,这通常是为了更好地适应有限的空间或者...

    jfreeChart生成的线状图,饼状图,柱状图

    JFreeChart是一款强大的Java图表库,它允许开发者在应用程序、Swing组件或Web应用中创建出各种复杂的图表,包括线状图、饼状图和柱状图。这些图表类型广泛应用于数据分析、报告制作以及可视化展示等领域。下面我们将...

    柱状图 圆饼图 曲线图 struts2.0 jfreechart

    柱状图通过不同长度的柱子来表示数据的差异,适用于比较类别间的数值。圆饼图通过扇形的大小表示数据占比,适合展示各部分在整体中的比例。曲线图则是用折线连接各个数据点,显示数据随时间或其他因素的变化趋势。 ...

    jfreechart 曲线图 3d饼图 3d柱状图

    **JFreeChart库详解:创建3D曲线图、3D饼图和3D柱状图** JFreeChart是一个强大的Java图形库,它提供了多种图表类型,包括曲线图、饼图和柱状图,且支持2D和3D效果。本篇文章将深入探讨如何使用JFreeChart来创建这些...

    用JFreeChart实现给柱状图的每根柱子加链接的例子

    我们可以使用`BarRenderer`渲染器来绘制柱状图,并通过设置其属性来改变柱子的样式和颜色。为了给柱子添加链接,我们需要扩展`BarRenderer`并重写其`drawItem()`方法,这里我们将创建一个名为`LinkBarRenderer`的类...

    JFreeChart 饼图、柱状图 例 (含数据库)

    JFreeChart允许你创建垂直或水平的柱状图,并可以自定义轴标签、颜色和数据标签。结合数据库,柱状图可以用来展示一段时间内的销售数据或者不同地区的用户分布等。 在MyEclipse环境中,你可能需要先导入JFreeChart...

    JFreeChart在jsp中显示柱状图、饼图

    **JFreeChart** 是一个Java库,用于生成高质量的图表,包括柱状图、饼图、线图等,广泛应用于Web应用中,如JSP(Java Server Pages)。在这个项目中,开发者通过JFreeChart在JSP页面上展示了数据的可视化,以帮助...

    JFreeChart绘图

    普通柱状图通过柱子的高度表示数据值,而堆栈柱状图则将多个数据系列以堆叠的方式显示在同一栏中,便于比较不同类别间的相对贡献。`CategoryDataset`用于存储数据,`BarPlot`类负责绘制。 3. **线图(Line Chart)** ...

    Java生成柱状图

    2. **柱状图基础**:柱状图由一系列垂直或水平的矩形(柱子)组成,每个柱子代表一个类别,柱子的高度表示该类别的数值大小。在Java中,`jfreechart`的`CategoryDataset`接口用于存储这些分类数据。 3. **创建...

Global site tag (gtag.js) - Google Analytics