`

解决JfreeChart柱状图数值显示在柱子顶端的问题

    博客分类:
  • JAVA
阅读更多

http://topic.csdn.net/u/20080610/16/8b83d303-239d-42fb-99e6-8bdf43c43cfa.html

 

package com.trustel.gd12580.datamanagement.service;

import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Paint;
import java.io.PrintWriter;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
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.entity.StandardEntityCollection;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.TextAnchor;
/**
* @author Liucl
*
*/
public class KpiCityCompanyChart {
/**
* 图片长度, 默认为650
*/
public static int IMAGE_WIDTH = 760;

/**
* 图片高度, 默认为350
*/
public static int IMAGE_HEIGHT = 350;

/**
* 设置图片显示大小,默认为450*350
*/
public static void setImageRange(int width, int height) {
IMAGE_WIDTH = width;
IMAGE_HEIGHT = height;
}
/**
* 用于生成柱状图
*
* @param title
*            图形标题
* @param domain
*            横坐标名称
* @param range
*            纵坐标名称
* @param session
*            图片生命周期
* @param pw
*            printWriter
* @param dataset
*            数据源
* @param length
*            分类数
* @return
*/
public static String createBarChartChart(String title, String domain,
String range, HttpSession session, PrintWriter pw,
DefaultCategoryDataset dataset) {
String filename = null;
try {
JFreeChart chart = createChart(title, domain, range, dataset);
// 把生成的图片放到临时目录
ChartRenderingInfo info = new ChartRenderingInfo(
new StandardEntityCollection());
// 设置图片名称前缀
ServletUtilities.setTempFilePrefix("chart-");
// 生成图片
filename = ServletUtilities.saveChartAsPNG(chart, IMAGE_WIDTH,
IMAGE_HEIGHT, info, session);
// ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush();
} catch (Exception e) {
e.printStackTrace(System.out);
filename = "error_warning.gif";
}
return filename;
}
/**
* Creates a sample chart.
*
* @param title
*            图形标题
* @param domain
*            横坐标名称
* @param range
*            纵坐标名称
* @param dataset
*            数据源
*
* @return The chart.
*/
private static JFreeChart createChart(String title, String domain,
String range, CategoryDataset dataset) {
// create the chart...
JFreeChart chart = ChartFactory.createBarChart3D(title, // title
domain, // domain axis label
range, // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);
// set the textTitle of the chart
TextTitle textTitle = chart.getTitle();
//设置标题的字体
String fontA = "华文细黑";
String fontB = "黑体";
textTitle.setFont(new Font(fontA,Font.PLAIN,13));
textTitle.setBackgroundPaint(new GradientPaint(0.0F, 0.0F, Color.decode("#EEF7FF"),
250F, 0.0F, Color.white, true));
textTitle.setExpandToFitSpace(true);
chart.setBackgroundPaint(new GradientPaint(0.0F, 0.0F, Color.decode("#EEF7FF"),
250F, 0.0F, Color.white, true));

        CategoryPlot plot = (CategoryPlot) chart.getCategoryPlot();
        BarRenderer3D customBarRenderer = (BarRenderer3D) plot.getRenderer();
        //CustomBarRenderer3D customBarRenderer = new CustomBarRenderer3D();
        //BarRenderer3D customBarRenderer = new BarRenderer3D();

plot.setDomainGridlinePaint(Color.white);
plot.setDomainGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.black);
plot.setBackgroundPaint(Color.decode("#F9E9D2"));
// 设置是否有横线
plot.setRangeGridlinesVisible(false);
NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
//设置纵坐标名称的字体
numberaxis.setLabelFont(new Font(fontA,Font.PLAIN,16));
//设置纵坐标上显示的数字字体
numberaxis.setTickLabelFont(new Font("Fixedsys",Font.PLAIN,13));
//设置横坐标名称的字体
CategoryAxis categoryaxis = plot.getDomainAxis();
categoryaxis.setLabelFont(new Font(fontA,Font.PLAIN,16));
//设置横坐标上显示各个业务子项的字体
categoryaxis.setTickLabelFont(new Font(fontA,Font.PLAIN,12));
categoryaxis.setMaximumCategoryLabelLines(100);
categoryaxis.setMaximumCategoryLabelWidthRatio(100);
//横坐标数据倾斜45度
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
// 顶端设置
numberaxis.setUpperMargin(0.14999999999999999D);
// 设置颜色
Paint apaint[] = createPaint();

customBarRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());//显示每个柱的数值
customBarRenderer.setBaseItemLabelsVisible(true);
//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题
customBarRenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
customBarRenderer.setItemLabelAnchorOffset(10D);// 设置柱形图上的文字偏离值
customBarRenderer.setItemLabelsVisible(true);

//设定柱子上面的颜色
customBarRenderer.setSeriesPaint(0, Color.decode("#24F4DB")); // 给series1 Bar
customBarRenderer.setSeriesPaint(1, Color.decode("#7979FF")); // 给series2 Bar
customBarRenderer.setSeriesPaint(2, Color.decode("#FF5555")); // 给series3 Bar
customBarRenderer.setSeriesPaint(3, Color.decode("#F8D661")); // 给series4 Bar
customBarRenderer.setSeriesPaint(4, Color.decode("#F284DC")); // 给series5 Bar
customBarRenderer.setSeriesPaint(5, Color.decode("#00BF00")); // 给series6 Bar
customBarRenderer.setSeriesOutlinePaint(0,Color.BLACK);//边框为黑色
customBarRenderer.setSeriesOutlinePaint(1,Color.BLACK);//边框为黑色
customBarRenderer.setSeriesOutlinePaint(2,Color.BLACK); //边框为黑色
customBarRenderer.setSeriesOutlinePaint(3,Color.BLACK);//边框为黑色
customBarRenderer.setSeriesOutlinePaint(4,Color.BLACK);//边框为黑色
customBarRenderer.setSeriesOutlinePaint(5,Color.BLACK); //边框为黑色
//设置柱子的最大宽度
customBarRenderer.setMaximumBarWidth(0.04);
customBarRenderer.setItemMargin(0.000000005);
plot.setRenderer(customBarRenderer);
return chart;
}
static class CustomBarRenderer3D extends BarRenderer3D {

public Paint getItemPaint(int i, int j) {
return colors[j % colors.length];
}

private Paint colors[];

public CustomBarRenderer3D(Paint apaint[]) {
colors = apaint;
}

public CustomBarRenderer3D() {
// TODO Auto-generated constructor stub
}
}
private static Paint[] createPaint() {
Paint apaint[] = new Paint[5];
apaint[0] = new GradientPaint(0.0F, 0.0F, Color.white, 0.0F, 0.0F,
Color.decode("#FF2020"));
apaint[1] = new GradientPaint(0.0F, 0.0F, Color.white, 0.0F, 0.0F,
Color.decode("#FF2020"));
apaint[2] = new GradientPaint(0.0F, 0.0F, Color.white, 0.0F, 0.0F,
Color.decode("#FF2020"));
apaint[3] = new GradientPaint(0.0F, 0.0F, Color.white, 0.0F, 0.0F,
Color.decode("#FF2020"));
apaint[4] = new GradientPaint(0.0F, 0.0F, Color.white, 0.0F, 0.0F,
Color.decode("#FF2020"));
return apaint;
}
}

分享到:
评论
2 楼 风雨人生 2011-10-14  
学习了,很好强大....
1 楼 wuqi123321 2009-03-04  
引用
asdfasdfa

相关推荐

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

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

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

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

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

    对于柱状图,可以使用`CategoryItemLabelGenerator`来为每个柱子添加标签,如显示具体数值。 至于图表的标题、轴标签等,可以通过`ChartTitle`、`CategoryAxis.createStandardAxisLabel()`和`ValueAxis....

    jfreechart 绘制横向立体柱状图

    利用jfreechart绘制的横向立体柱状图,横坐标是数值,纵坐标是数据分类,需要提前引入jfreechart包文件到工程里,才不会报错

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

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

    JFreeChart画图 饼状图 单组柱状图 多组柱状图 堆积柱状图 折线图

    JFreeChart 饼状图 柱状图 柱状图 堆积柱状图 折线图 这个是我特地开发的一个用JFreeChart开发的用来画图的项目,已经开发成形了各种项目的各种需求的项目,并且自己可以拓展,根据需求修改代码,完成项目的需要。 ...

    jfreechart实现柱状图排序

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

    JfreeChart柱状图饼图

    在Java编程中,JFreeChart库是一个强大的图表绘制工具,它能够帮助开发者创建出多种类型的图表,包括柱状图、饼图等,广泛应用于数据分析和可视化展示。这篇博文中,我们将深入探讨如何使用JFreeChart来创建柱状图和...

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

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

    JFreeChart动态加载柱状图

    JFreeChart创建柱状图,之前网上很多都是创建柱状图的,静态的。数据更新之后柱状图随之改变,代码实现详见附件代码。所需要的jar包是jfreechart-1.0.13.jar,gnujaxp.jar,jcommon-1.0.16.jar

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

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

    java+jfreechart+struts 生成柱状图

    java+jfreechart+struts 生成柱状图 java jfreechart 柱状图 java jfreechart 柱状图 谁需要完整项目可以去http://download.csdn.net/source/2665347

    jfreechart柱状图

    在商业智能和统计分析中,柱状图能够清晰地比较不同类别的数值,尤其适合于显示各类别之间的差异和整体趋势。 在 JFreeChart 中创建柱状图主要涉及以下步骤: 1. **创建 CategoryDataset**:这是柱状图的基础,...

    JFreeChart柱状图资料

    在JFreeChart的CHM手册中,你可以找到关于如何使用JFreeChart创建柱状图的详细步骤、API参考、示例代码以及问题解决方案。 6. **应用场景** JFreeChart的柱状图常用于商业报告、统计分析、科学实验结果展示等场景...

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

    柱状图是数据可视化中常用的一种方式,它通过竖直或水平的柱子长度来表示数值大小。在JFreeChart中,可以使用`CategoryPlot`类来创建柱状图。我们需要准备数据集,通常是`DefaultCategoryDataset`对象,然后将数据集...

    JFreeChart 折线、柱状组合图

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

    利用JFreeChart 实现柱状图,饼图,时序图,折线图等

    在Java编程环境中,JFreeChart库是一个非常强大的工具,它允许开发者轻松地创建各种图表,如柱状图、饼图、时序图和折线图等。这些图表在数据分析、报表展示以及各种可视化应用中非常常见。下面我们将详细介绍如何...

Global site tag (gtag.js) - Google Analytics