我现在需要用jfreechart做一些东西
横轴不是时间,也不是数字
怎么弄?
最好发给我一个例子
最好折线图,柱状图和饼图一样一个
谢谢受到以后给分
请写上你的ID,我好给分
或者加我qq376389006
msn [email protected]
给我也可以
谢谢
横轴不是时间,也不是数字
怎么弄?
最好发给我一个例子
最好折线图,柱状图和饼图一样一个
谢谢受到以后给分
请写上你的ID,我好给分
或者加我qq376389006
msn [email protected]
给我也可以
谢谢
即只需要我输入固定格式数据就成
比如
String filename=chart.getXYChart(list);
给你个好东西--是个源码。
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.RenderingHints;
import java.io.PrintWriter;import javax.servlet.http.HttpSession;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
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.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
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.CategoryItemRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;public class CategoryItemChart {
public static String generateBarChart(
HttpSession session,
PrintWriter pw,
int w, int h) {
String filename = null;
try {
CategoryDataset dataset=createDataset();
JFreeChart chart=ChartFactory.createBarChart(
"世界傻瓜大奖赛",//图表标题
"比赛场次",//X轴标题
"傻瓜程度",//Y轴标题
dataset,//数据集合
PlotOrientation.VERTICAL,//图表显示方向(水平、垂直)
true,//是否使用图例
false,//是否使用工具提示
false//是否为图表增加URL
);
/*------------配置图表属性--------------*/
// 1,设置整个图表背景颜色
chart.setBackgroundPaint(Color.yellow);
/*------------设定Plot参数-------------*/
CategoryPlot plot=chart.getCategoryPlot();
// 2,设置详细图表的显示细节部分的背景颜色
plot.setBackgroundPaint(Color.PINK);
// 3,设置垂直网格线颜色
plot.setDomainGridlinePaint(Color.black);
//4,设置是否显示垂直网格线
plot.setDomainGridlinesVisible(true);
//5,设置水平网格线颜色
plot.setRangeGridlinePaint(Color.yellow);
//6,设置是否显示水平网格线
plot.setRangeGridlinesVisible(true);
/*---------将所有数据转换为整数形式---------*/
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
/*---------设置是否在柱图的状态条上显示边框----*/
CategoryItemRenderer renderer = (CategoryItemRenderer) plot.getRenderer();
BarRenderer render=(BarRenderer) plot.getRenderer();
render.setItemMargin(0.1);
/*---------设置状态条颜色的深浅渐变-----------*/
GradientPaint gp0 = new GradientPaint(
0.0f, 0.0f, new Color(255,200,80),
0.0f, 0.0f, new Color(255,255,40)
);
GradientPaint gp1 = new GradientPaint(
0.0f, 0.0f, new Color(50,255,50),
0.0f, 0.0f, new Color(100,255,100)
);
GradientPaint gp2 = new GradientPaint(
0.0f, 0.0f, Color.red,
0.0f, 0.0f, new Color(255,100,100)
);
GradientPaint gp3 = new GradientPaint(
0.0f, 0.0f, new Color(108,108,255),
0.0f, 0.0f, new Color(150, 150, 200)
);
renderer.setSeriesPaint(0, gp0);
renderer.setSeriesPaint(1, gp1);
renderer.setSeriesPaint(2, gp2);
renderer.setSeriesPaint(3, gp3);
/*
* 解决柱状体与图片边框的间距问题
* */
/*------设置X轴标题的倾斜程度----*/
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setCategoryLabelPositions(
CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
);
/*------设置柱状体与图片边框的左右间距--*/
domainAxis.setLowerMargin(0.01);
domainAxis.setUpperMargin(0.01); /*------设置柱状体与图片边框的上下间距---*/
ValueAxis rAxis = plot.getRangeAxis();
rAxis.setUpperMargin(0.15);
rAxis.setLowerMargin(0.15);
/*---------设置每一组柱状体之间的间隔---------*/
render.setItemMargin(0.0);
/*
* 解决柱状体与图片边框的间距问题
* 解决JFREECHART的中文显示问题
* */
/*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/
chart.getRenderingHints().put(
RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF
);
/*----------设置标题字体--------------------------*/
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
/*------设置X轴坐标上的文字-----------*/
domainAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,11));
/*------设置X轴的标题文字------------*/
domainAxis.setLabelFont(new Font("宋体",Font.PLAIN,12));
/*------设置Y轴坐标上的文字-----------*/
rAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,12));
/*------设置Y轴的标题文字------------*/
rAxis.setLabelFont(new Font("黑体",Font.PLAIN,12));
/*---------设置柱状体上的显示的字体---------*/
renderer.setItemLabelGenerator(new LabelGenerator(0.0));
renderer.setItemLabelFont(new Font("宋体",Font.PLAIN,12));
renderer.setItemLabelsVisible(true);
/*
* 解决JFREECHART的中文显示问题
* */
/*------得到chart的保存路径----*/
ChartRenderingInfo info = new ChartRenderingInfo(new
StandardEntityCollection());
filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);
/*------使用printWriter将文件写出----*/
ChartUtilities.writeImageMap(pw, filename, info,true);
pw.flush();
}
catch (Exception e) {
System.out.println("Exception - " + e.toString());
e.printStackTrace(System.out);
filename = "public_error_500x300.png";
}
return filename;
}
/*-------------设置柱状体顶端的数据显示--------------*/
static class LabelGenerator implements CategoryItemLabelGenerator {
private double threshold;
public LabelGenerator(double threshold) {
this.threshold = threshold;
}
public String generateLabel(CategoryDataset dataset,
int row,int column) {
String result = null;
final Number value = dataset.getValue(row, column);
if (value != null) {
final double v = value.doubleValue();
if (v > this.threshold) {
result = value.toString();
}
}
return result;
}
public String generateRowLabel(CategoryDataset dataset,
int row){
return null;
}
public String generateColumnLabel(CategoryDataset dataset,
int column){
return null;
}
}
/*-----------数据集合封装-------------*/
private static CategoryDataset createDataset(){
String s1="笨笨";
String s2="蛋蛋";
String s3="傻傻";
String s4="瓜瓜";
String c1="第一场";
String c2="第二场";
String c3="第三场";
String c4="第四场";
String c5="第五场";
/*-------------封装图表使用的数据集-------------*/
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.setValue(1.0,s1,c1);
dataset.setValue(2.0,s1,c2);
dataset.setValue(3.0,s1,c3);
dataset.setValue(4.0,s1,c4);
dataset.setValue(5.0,s1,c5);
dataset.setValue(5.0,s2,c1);
dataset.setValue(4.0,s2,c2);
dataset.setValue(3.0,s2,c3);
dataset.setValue(2.0,s2,c4);
dataset.setValue(1.0,s2,c5);
dataset.setValue(1.0,s3,c1);
dataset.setValue(2.0,s3,c2);
dataset.setValue(3.0,s3,c3);
dataset.setValue(2.0,s3,c4);
dataset.setValue(1.0,s3,c5);
dataset.setValue(1.0,s4,c1);
dataset.setValue(2.0,s4,c2);
dataset.setValue(3.0,s4,c3);
dataset.setValue(4.0,s4,c4);
dataset.setValue(5.0,s4,c5);
return dataset;
}
}
JSP文件:
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="com.myJFreeChart.util.CategoryItemChart"%>
<%@ page import="java.io.PrintWriter"%>
<html>
<head>
<title>
</title>
<%
//以下部分为图象输出
String fileName=CategoryItemChart.generateBarChart(session,new PrintWriter(out),580,250);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
%>
</head>
<body bgcolor="#ffffff">
<table width="580" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<img src="<%= graphURL %>" width=580 height=250 border=0
>
</td>
</tr>
</table>
</body>
</html>
WEB.XML文件中要配置生成图片的SERVLET:
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
<%@ page contentType="text/html; charset=gb2312" language="java"%>
<%@ page import="java.util.*,java.io.*,java.awt.*,com.sscrm.asp.beans.utils.*,java.text.SimpleDateFormat"%>
<%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.renderer.category.*, org.jfree.data.category.*,org.jfree.chart.renderer.category.LineRenderer3D"%>
<%@ page import="org.jfree.data.general.DefaultPieDataset"%>
<%@ page import="org.jfree.chart.*"%>
<%@ page import="org.jfree.chart.plot.*"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import="org.jfree.chart.labels.StandardPieItemLabelGenerator"%>
<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%@ page import="java.util.List" %>
<%
String selfDateBegin = "";
String selfDateEnd = "";
String selfMonthBegin = "";
String selfMonthEnd = "";
String flag = "0";
String typeid = "02";
String picname ="";
if(typeid.equals("01")){
picname="单客户多产品月环比分析"+" 日期:"+selfDateBegin+"年"+selfMonthBegin+"月-"+selfDateEnd+"年"+selfMonthEnd+"月";
}else if(typeid.equals("02")){
picname="多客户单产品月环比分析"+" 日期:"+selfDateBegin+"年"+selfMonthBegin+"月-"+selfDateEnd+"年"+selfMonthEnd+"月";
}
HashMap customernameMap = new HashMap();
HashMap productnameMap = new HashMap();
HashMap loopReportMap = new HashMap();
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
int num = 0;
try{
if(typeid.equals("02")){
productnameMap=customernameMap;
}
if(productnameMap!=null&&productnameMap.size()>0){
for(int i=0;i<productnameMap.size();i++){
String s1 = (String)productnameMap.get(""+i);
String[] s2 = s1.split(",");
String id = s2[0];
String name = s2[1];
int year = Integer.parseInt(selfDateBegin);
int month = Integer.parseInt(selfMonthBegin);
if(loopReportMap!=null&&loopReportMap.size()>0){
Double[] Value = (Double[])loopReportMap.get(id);
num = Value.length;
double loopadd = 0.0;
int j = 0;
if(selfDateBegin.equals(selfDateEnd)){ //开始日期和结束日期为同一年
//System.out.println("==================开始日期和结束日期为同一年======+++++======= ");
for(;month<=Integer.parseInt(selfMonthEnd);month++){
if(j>0) {
if(Value[j-1].doubleValue()==0.0){
loopadd = 0.0;
}else{
loopadd = (Value[j].doubleValue()-Value[j-1].doubleValue())*100/Value[j-1].doubleValue();
}
}
dataset.addValue(loopadd,name,year+"年"+month+"月");
j++;
}
}else{
//System.out.println("==================开始日期和结束日期不为同一年============= ");
//开始年日期标题
for(;month<13;month++){
if(j>0) {
if(Value[j-1].doubleValue()==0.0){
loopadd = 0.0;
}else{
loopadd = (Value[j].doubleValue()-Value[j-1].doubleValue())*100/Value[j-1].doubleValue();
}
}
dataset.addValue(loopadd,name,year+"年"+month+"月");
j++;
}
year = year + 1;
//开始日期~结束日期中间年份标题
if(year>Integer.parseInt(selfDateBegin)&&year<Integer.parseInt(selfDateEnd)){
for(;year<Integer.parseInt(selfDateEnd);year++){
for(int k=1;k<13;k++){
if(j>0) {
if(Value[j-1].doubleValue()==0.0){
loopadd = 0.0;
}else{
loopadd = (Value[j].doubleValue()-Value[j-1].doubleValue())*100/Value[j-1].doubleValue();
}
}
dataset.addValue(loopadd,name,year+"年"+k+"月");
j++;
}
}
}
//结束年日期标题
if(year==Integer.parseInt(selfDateEnd)){
month = Integer.parseInt(selfMonthEnd);
for(int k=1;k<=month;k++){
if(j>0) {
if(Value[j-1].doubleValue()==0.0){
loopadd = 0.0;
}else{
loopadd = (Value[j].doubleValue()-Value[j-1].doubleValue())*100/Value[j-1].doubleValue();
}
}
dataset.addValue(loopadd,name,year+"年"+k+"月");
j++;
}
}
}
}
}
}
JFreeChart chart = ChartFactory.createLineChart(
picname, // 图表标题
"日期", // 目录轴的显示标签
"增长率(%)", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
response.setContentType("image/jpeg");
response.flushBuffer();
OutputStream out1 = response.getOutputStream();
int chartW = 0;
if(num*100+100>1200){
chartW = 1200;
}else if(num*100+100<600){
chartW = 600;
}else{
chartW = num*100+100;
}
int chartH=340;
ChartUtilities.writeChartAsJPEG(out1, chart, chartW, chartH);
}catch(Exception e){
e.printStackTrace();
}
%>