`

JfreeChar堆积柱状图

 
阅读更多

package com.gamemag.web.player;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Font;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.List;

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.ValueAxis;

import org.jfree.chart.entity.StandardEntityCollection;

import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;

import org.jfree.chart.plot.CategoryPlot;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.renderer.category.StackedBarRenderer;

import org.jfree.chart.renderer.category.StandardBarPainter;

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.RectangleEdge;

import org.springside.modules.orm.Page;

import com.gamemag.vo.IngotUseDirectionVo;

public class IngotUseBarChart {

/**

 * 

 * @param page

 * @param ingotList

 * @param ingotVo

 * @return

 */

private static CategoryDataset createDataset(Page<IngotUseDirectionVo> page,

List<IngotUseDirectionVo> ingotList, List<IngotUseDirectionVo> ingotVo) {

DefaultCategoryDataset defaultcategorydateaset = new DefaultCategoryDataset();

int index = 0;

if(page.getResult().size() > 14){

index = page.getResult().size() - 14;

}

for (int i = index ; i < page.getResult().size(); i++) {

String time = page.getResult().get(i).getDateTime().toString().substring(0, 10);

for (int j = 0; j < ingotVo.size(); j++) {

String ct_name = ingotVo.get(j).getCt_name();

for (int k = 0; k < ingotList.size(); k++) {

String time2 = ingotList.get(k).getDateTime().toString().substring(0, 10);

if(ingotVo.get(j).getCt_id().equals(ingotList.get(k).getCt_id()) && time.equals(time2)){

int sum = ingotList.get(k).getIngot();

defaultcategorydateaset.addValue(sum, ct_name, time);

}

}

}

}

return defaultcategorydateaset;

}

// 创建JFreeChar对象

private static JFreeChart createChart(CategoryDataset categoydataset) {

JFreeChart jfreechart = ChartFactory.createStackedBarChart("《武将杀》近14天元宝消耗方向"// 图表标题

null,// x轴的显示标签

null// y轴的显示标签

categoydataset,// 数据集

PlotOrientation.VERTICAL,// 图表方向:水平垂直

true// 是否生成图例

true,// 是否生成工具

false// 是否生成URL链接

);

// 解决标题乱码

CategoryPlot categoryplot = jfreechart.getCategoryPlot();

CategoryAxis domainAxis = categoryplot.getDomainAxis();// x轴

ValueAxis numberaxis = categoryplot.getRangeAxis(); // y轴

TextTitle t = jfreechart.getTitle();

t.setFont(new Font("宋体", Font.BOLD, 22));// 标题文字

domainAxis.setLabelFont(new Font("宋体", Font.BOLD, 20));// x轴标题文字

domainAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 10));// x轴坐标上文字

domainAxis.setAxisLineStroke(new BasicStroke(1.6f)); // 设置轴线粗细

numberaxis.setLabelFont(new Font("宋体", Font.BOLD, 20));// y轴标题文字

numberaxis.setTickLabelFont(new Font("黑体", Font.BOLD, 10));// y轴坐标上文字

numberaxis.setAxisLineStroke(new BasicStroke(1.6f)); // 设置轴线粗细

numberaxis.setUpperMargin(0.1);// 设置最高的一个柱与图片顶端的距离(最高柱的10%)

jfreechart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 12));// 图例文字

jfreechart.getLegend().setPosition(RectangleEdge.RIGHT); // 图例居右

jfreechart.getLegend().setBackgroundPaint(Color.gray);// 图例背景色

jfreechart.setBorderStroke(new BasicStroke(1));// 设置边框宽度

jfreechart.setBackgroundPaint(Color.white); // 设置背景颜色

//jfreechart.setBackgroundPaint(new Color(253 , 231, 243));

StackedBarRenderer renderer = new StackedBarRenderer();

// renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());

// renderer.setBaseItemLabelsVisible(true);//显示每个柱的数值

// 让柱子显示为一个平面图

renderer.setBarPainter(new StandardBarPainter());

renderer.setItemMargin(-0.01);

renderer.setShadowVisible(false);// 取消阴影

renderer.setMaximumBarWidth(0.05);// 设置柱子宽度

//renderer.setSeriesPaint(0, new Color(51, 102, 153));// 设置柱子颜色

categoryplot.setRenderer(renderer);

categoryplot.setBackgroundPaint(Color.white);

categoryplot.setDomainGridlinePaint(Color.white);//纵坐标虚线颜色

categoryplot.setDomainGridlinesVisible(true); 

categoryplot.setRangeGridlinePaint(Color.white); //横坐标虚线颜色

categoryplot.setNoDataMessage("No data available");

categoryplot.setBackgroundPaint(Color.lightGray); 

// categoryplot.setDomainGridlinePaint(Color.black); //设置纵坐标网格线(平分柱子)

// categoryplot.setRangeGridlinePaint(Color.blue);//设置纵坐标网格线

CategoryAxis categoryaxis = categoryplot.getDomainAxis(); // 横轴上的 Lable

categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);// 45度倾斜

return jfreechart;

}

public static String generateBarChart(HttpSession session, PrintWriter out,

Page<IngotUseDirectionVo> page,

List<IngotUseDirectionVo> ingotList,

List<IngotUseDirectionVo> ingotVo) throws IOException {

String filename = null;

CategoryDataset categoryDateset = createDataset(page, ingotList,

ingotVo);

JFreeChart chart = createChart(categoryDateset);

/**

 * File directory = new File(".");

 * System.out.println(directory.getCanonicalPath

 * ()+"=========="+img_path);

 * 

 * FileOutputStream fos_jpg = null; try { fos_jpg = new

 * FileOutputStream("fruit.jpg");

 * ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 400,300,null);

 * } finally { try { fos_jpg.close(); } catch (Exception e) {} }

 **/

ChartRenderingInfo info = new ChartRenderingInfo(

new StandardEntityCollection());

try {

filename = ServletUtilities.saveChartAsPNG(chart, 1100, 450, info,

session);

ChartUtilities.writeImageMap(out, filename, info, false);

catch (IOException e) {

e.printStackTrace();

}

out.flush();

return filename;

}

}

  • 大小: 21.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics