饼状图


package com.web.utils;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.Shape;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Random;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

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.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.ChartEntity;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.CategoryToolTipGenerator;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.chart.urls.StandardCategoryURLGenerator;
import org.jfree.chart.urls.StandardPieURLGenerator;
import org.jfree.ui.TextAnchor;

public class BarChart {
public BarChart() {
}

/**
* 图形相关数据设置
*
* @param request
* @param response
* @return
* @throws IOException
*/
public String showBar(HttpServletResponse response,
HttpSession session, String realPath) throws IOException {
String filename = null;
FileOperate fo = new FileOperate();
PrintWriter pw = response.getWriter(); // 输出MAP信息
int width = 1000;
int height = 600;
JFreeChart chart = (JFreeChart)FacesUtils.getValueInHashtableOfSession("chart");
CategoryPlot plot = chart.getCategoryPlot();

BarRenderer customBarRenderer = (BarRenderer) plot.getRenderer();
//设定柱子上面的颜色
customBarRenderer.setSeriesPaint(0, Color.decode("#40A410")); // 给series1 Bar
customBarRenderer.setSeriesPaint(1, Color.decode("#40A410")); // 给series2 Bar
customBarRenderer.setSeriesPaint(2, Color.decode("#40A410")); // 给series3 Bar
customBarRenderer.setSeriesPaint(3, Color.decode("#40A410")); // 给series4 Bar
customBarRenderer.setSeriesPaint(4, Color.decode("#40A410")); // 给series5 Bar
customBarRenderer.setSeriesPaint(5, Color.decode("#40A410")); // 给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.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
customBarRenderer.setBaseItemLabelsVisible(true);
customBarRenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT));
customBarRenderer.setItemLabelAnchorOffset(10D);
customBarRenderer.setMaximumBarWidth(0.03);
customBarRenderer.setMinimumBarLength(0.03);
String url=(String)FacesUtils.getValueInHashtableOfSession("url");
customBarRenderer.setBaseItemURLGenerator(new StandardCategoryURLGenerator(url,"p1","p2"));
CategoryToolTipGenerator generatorToolTip = new StandardCategoryToolTipGenerator("{0}{1}{2}", NumberFormat.getInstance(Locale.CHINESE));
customBarRenderer.setBaseToolTipGenerator(generatorToolTip);
plot.setRenderer(customBarRenderer);
plot.setDomainGridlinePaint(Color.yellow);

// 图片输出流,图片的保存路径
Random rand = new Random();
int i = rand.nextInt();
String imgPath = realPath + "chartTemp\\" + System.nanoTime()+Tools.getRandom(i)+ ".png";
fo.newFolder(realPath + "chartTemp\\");
FileOutputStream fout = new FileOutputStream(imgPath);
// shape是指热点的区域
Shape shape = new Rectangle(20, 10);
ChartEntity entity = new ChartEntity(shape);
StandardEntityCollection coll = new StandardEntityCollection();
coll.add(entity);
ChartRenderingInfo info = new ChartRenderingInfo(coll);
// 并将图片信息写入到info对象中
ChartUtilities.writeChartAsPNG(fout, chart, width, height, info);
// 生成图片,并返回图片名称
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
// 读取ChartRenderingInfo对象,生成Map信息,这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了。
ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush(); // 调用pw.flush()方法关闭IO流
return filename;
}

public String showBarana(HttpServletResponse response,
HttpSession session, String realPath) throws IOException {
String filename = null;
FileOperate fo = new FileOperate();
PrintWriter pw = response.getWriter(); // 输出MAP信息
int width = 1000;
int height = 600;
JFreeChart chart = (JFreeChart)FacesUtils.getValueInHashtableOfSession("chart");
CategoryPlot plot = chart.getCategoryPlot();

BarRenderer customBarRenderer = (BarRenderer) plot.getRenderer();
//设定柱子上面的颜色
customBarRenderer.setSeriesPaint(0, Color.decode("#40A410")); // 给series1 Bar
customBarRenderer.setSeriesPaint(1, Color.decode("#40A410")); // 给series2 Bar
customBarRenderer.setSeriesPaint(2, Color.decode("#40A410")); // 给series3 Bar
customBarRenderer.setSeriesPaint(3, Color.decode("#40A410")); // 给series4 Bar
customBarRenderer.setSeriesPaint(4, Color.decode("#40A410")); // 给series5 Bar
customBarRenderer.setSeriesPaint(5, Color.decode("#40A410")); // 给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.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
customBarRenderer.setBaseItemLabelsVisible(true);
customBarRenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT));
customBarRenderer.setItemLabelAnchorOffset(10D);
customBarRenderer.setMaximumBarWidth(0.03);
customBarRenderer.setMinimumBarLength(0.03);
String url=(String)FacesUtils.getValueInHashtableOfSession("url");
customBarRenderer.setBaseItemURLGenerator(new StandardCategoryURLGenerator(url,"p1","p2"));
CategoryToolTipGenerator generatorToolTip = new StandardCategoryToolTipGenerator("{0}{1}{2}", NumberFormat.getInstance(Locale.CHINESE));
customBarRenderer.setBaseToolTipGenerator(generatorToolTip);
plot.setRenderer(customBarRenderer);
plot.setDomainGridlinePaint(Color.yellow);

// 图片输出流,图片的保存路径
Random rand = new Random();
int i = rand.nextInt();
String imgPath = realPath + "chartTemp\\" + System.nanoTime()+Tools.getRandom(i)+ ".png";
fo.newFolder(realPath + "chartTemp\\");
FileOutputStream fout = new FileOutputStream(imgPath);
// shape是指热点的区域
Shape shape = new Rectangle(20, 10);
ChartEntity entity = new ChartEntity(shape);
StandardEntityCollection coll = new StandardEntityCollection();
coll.add(entity);
ChartRenderingInfo info = new ChartRenderingInfo(coll);
// 并将图片信息写入到info对象中
ChartUtilities.writeChartAsPNG(fout, chart, width, height, info);
// 生成图片,并返回图片名称
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
// 读取ChartRenderingInfo对象,生成Map信息,这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了。
ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush(); // 调用pw.flush()方法关闭IO流
return filename;
}




public String showpie(HttpServletResponse response,
HttpSession session, String realPath) throws IOException {

String filename = null;
FileOperate fo = new FileOperate();
PrintWriter pw = response.getWriter(); // 输出MAP信息
int width = 800;
int height = 600;
JFreeChart chart = (JFreeChart)FacesUtils.getValueInHashtableOfSession("chart");
PiePlot plot = (PiePlot) chart.getPlot();
// requestUrl为链接地址
String url=(String)FacesUtils.getValueInHashtableOfSession("url");
plot.setURLGenerator(new StandardPieURLGenerator(url, "name"));
// 图片中显示百分比:默认方式
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值,
//{2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}={1}({2})", NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}"));
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(1.0f);
// 指定显示的饼图上圆形(true)还椭圆形(false)
plot.setCircular(true);
// 设置图上分类标签label的字体,解决中文乱码
plot.setLabelFont(new Font("黑体", Font.PLAIN, 12));
// 设置图上分类标签label的最大宽度,相对与plot的百分比
plot.setMaximumLabelWidth(0.2);
// 设置3D饼图的Z轴高度(0.0~1.0)
// plot.setDepthFactor(0.07);
//设置起始角度,默认值为90,当为0时,起始值在3点钟方向
plot.setStartAngle(45);
// 设置图标题的字体,解决中文乱码
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
// 设置背景色为白色
chart.setBackgroundPaint(Color.white);
// 设置Legend部分字体,解决中文乱码
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
// 输出图片到文件
Random rand = new Random();
int i = rand.nextInt();
String imgPath = realPath + "chartTemp\\" + System.nanoTime()+Tools.getRandom(i)+ ".png";
fo.newFolder(realPath + "chartTemp\\");
FileOutputStream fout = new FileOutputStream(imgPath);
// shape是指热点的区域
Shape shape = new Rectangle(20, 10);
ChartEntity entity = new ChartEntity(shape);
StandardEntityCollection coll = new StandardEntityCollection();
coll.add(entity);
ChartRenderingInfo info = new ChartRenderingInfo(coll);
// 并将图片信息写入到info对象中
ChartUtilities.writeChartAsPNG(fout, chart, width, height, info);
// 生成图片,并返回图片名称
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
// 读取ChartRenderingInfo对象,生成Map信息,这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了。
ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush(); // 调用pw.flush()方法关闭IO流
return filename;
}
public String showpie1(HttpServletResponse response,
HttpSession session, String realPath) throws IOException {

String filename = null;
FileOperate fo = new FileOperate();
PrintWriter pw = response.getWriter(); // 输出MAP信息
int width = 800;
int height = 600;
JFreeChart chart = (JFreeChart)FacesUtils.getValueInHashtableOfSession("chart");
PiePlot plot = (PiePlot) chart.getPlot();
// requestUrl为链接地址
//String url=(String)FacesUtils.getValueInHashtableOfSession("url");
// plot.setURLGenerator(new StandardPieURLGenerator(url, "name"));
// 图片中显示百分比:默认方式
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值,
//{2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}={1}({2})", NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}"));
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(1.0f);
// 指定显示的饼图上圆形(true)还椭圆形(false)
plot.setCircular(true);
// 设置图上分类标签label的字体,解决中文乱码
plot.setLabelFont(new Font("黑体", Font.PLAIN, 12));
// 设置图上分类标签label的最大宽度,相对与plot的百分比
plot.setMaximumLabelWidth(0.2);
// 设置3D饼图的Z轴高度(0.0~1.0)
// plot.setDepthFactor(0.07);
//设置起始角度,默认值为90,当为0时,起始值在3点钟方向
plot.setStartAngle(45);
// 设置图标题的字体,解决中文乱码
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
// 设置背景色为白色
chart.setBackgroundPaint(Color.white);
// 设置Legend部分字体,解决中文乱码
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
// 输出图片到文件
Random rand = new Random();
int i = rand.nextInt();
String imgPath = realPath + "chartTemp\\" + System.nanoTime()+Tools.getRandom(i)+ ".png";
fo.newFolder(realPath + "chartTemp\\");
FileOutputStream fout = new FileOutputStream(imgPath);
// shape是指热点的区域
Shape shape = new Rectangle(20, 10);
ChartEntity entity = new ChartEntity(shape);
StandardEntityCollection coll = new StandardEntityCollection();
coll.add(entity);
ChartRenderingInfo info = new ChartRenderingInfo(coll);
// 并将图片信息写入到info对象中
ChartUtilities.writeChartAsPNG(fout, chart, width, height, info);
// 生成图片,并返回图片名称
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
// 读取ChartRenderingInfo对象,生成Map信息,这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了。
ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush(); // 调用pw.flush()方法关闭IO流
return filename;
}

public String showline(HttpServletResponse response,
HttpSession session, String realPath) throws IOException {

String filename = null;
FileOperate fo = new FileOperate();
PrintWriter pw = response.getWriter(); // 输出MAP信息
int width = 800;
int height = 300;
JFreeChart chart = (JFreeChart)FacesUtils.getValueInHashtableOfSession("chart");
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(Color.LIGHT_GRAY); // 设置绘图区背景色
plot.setRangeGridlinePaint(Color.WHITE); // 设置水平方向背景线颜色
plot.setRangeGridlinesVisible(true);// 设置是否显示水平方向背景线,默认值为true
plot.setDomainGridlinePaint(Color.WHITE); // 设置垂直方向背景线颜色
plot.setDomainGridlinesVisible(true); // 设置是否显示垂直方向背景线,默认值为false


CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLowerMargin(0.01);// 左边距 边框距离
domainAxis.setUpperMargin(0.06);// 右边距 边框距离,防止最后边的一个数据靠近了坐标轴。
domainAxis.setMaximumCategoryLabelLines(2);

ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());//Y轴显示整数
rangeAxis.setAutoRangeMinimumSize(1); //最小跨度
rangeAxis.setUpperMargin(0.18);//上边距,防止最大的一个数据靠近了坐标轴。
rangeAxis.setLowerBound(0); //最小值显示0
rangeAxis.setAutoRange(false); //不自动分配Y轴数据
rangeAxis.setTickMarkStroke(new BasicStroke(1.6f)); // 设置坐标标记大小
rangeAxis.setTickMarkPaint(Color.GREEN); // 设置坐标标记颜色



// 获取折线对象
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
BasicStroke realLine = new BasicStroke(3.0f); // 设置实线
// 设置虚线
float dashes[] = { 5.0f };
BasicStroke brokenLine = new BasicStroke(5.2f, // 线条粗细
BasicStroke.JOIN_MITER, // 端点风格
BasicStroke.CAP_BUTT, // 折点风格
8f, dashes, 1.6f);

plot.setNoDataMessage("无对应的数据,请重新查询。");
plot.setNoDataMessagePaint(Color.RED);
// 设置图标题的字体,解决中文乱码
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
// 设置背景色为白色
chart.setBackgroundPaint(Color.white);
// 设置Legend部分字体,解决中文乱码
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
// 输出图片到文件
Random rand = new Random();
int i = rand.nextInt();
String imgPath = realPath + "chartTemp\\" + System.nanoTime()+Tools.getRandom(i)+ ".png";
fo.newFolder(realPath + "chartTemp\\");
FileOutputStream fout = new FileOutputStream(imgPath);
// shape是指热点的区域
Shape shape = new Rectangle(20, 10);
ChartEntity entity = new ChartEntity(shape);
StandardEntityCollection coll = new StandardEntityCollection();
coll.add(entity);
ChartRenderingInfo info = new ChartRenderingInfo(coll);
// 并将图片信息写入到info对象中
ChartUtilities.writeChartAsPNG(fout, chart, width, height, info);
// 生成图片,并返回图片名称
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
// 读取ChartRenderingInfo对象,生成Map信息,这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了。
ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush(); // 调用pw.flush()方法关闭IO流
return filename;
}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值