package com.gamemag.web.statistics; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.io.IOException; import java.io.PrintWriter; import java.text.DecimalFormat; 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.AxisLocation; 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.ItemLabelAnchor; import org.jfree.chart.labels.ItemLabelPosition; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.labels.StandardCategoryToolTipGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.DatasetRenderingOrder; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.LineAndShapeRenderer; 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.jfree.ui.TextAnchor; import com.gamemag.vo.statistics.ChargeStaVo; public class ChargeStaChar { private static CategoryDataset createDataset1(List<ChargeStaVo> list) { String price = "充值总金额"; DefaultCategoryDataset dataset = new DefaultCategoryDataset(); int num = 0; for (int i = 0; i < list.size(); i++) { num++; if (num <= 14) { dataset.setValue(Integer.parseInt(String.valueOf(list.get(i) .getPrice())), price, list.get(i).getDateTime() .toString().substring(0, 10)); } } return dataset; } private static CategoryDataset createDataset2(List<ChargeStaVo> list) { String price = "新增充值用户充值金额"; DefaultCategoryDataset dataset = new DefaultCategoryDataset(); int num = 0; for (int i = 0; i < list.size(); i++) { num++; if (num <= 14) { dataset.setValue(list.get(i).getAddNewPrice(), price, list.get( i).getDateTime().toString().substring(0, 10)); } } return dataset; } private static JFreeChart createChart(String chartTitle, String Xname, String Yname, CategoryDataset dataset1, CategoryDataset dataset2) { JFreeChart chart = ChartFactory.createBarChart(chartTitle, Xname, Yname, dataset1, PlotOrientation.VERTICAL, true, false, false); //chart.setBackgroundPaint(Color.white); chart.getLegend().setPosition(RectangleEdge.RIGHT); // 图例居右 CategoryPlot categoryplot = chart.getCategoryPlot();// 获得图表对象 //categoryplot.setDomainGridlinesVisible(true);// x轴 // 分类轴网格是否可见 //categoryplot.setDomainGridlinePaint(Color.blue);// 虚线色彩 categoryplot.setRangeGridlinesVisible(true);// y轴 //数据轴网格是否可见 categoryplot.setRangeGridlinePaint(Color.WHITE);// 虚线色彩 // 图例字体清晰 chart.getLegend().setItemFont(new Font("宋体", Font.TRUETYPE_FONT, 14)); chart.setTextAntiAlias(false); // 主标题对象 主标题对象是 TextTitle 类型 chart.setTitle(new TextTitle(chartTitle, new Font("隶书", Font.TRUETYPE_FONT, 25))); // 设置中文 // x,y轴坐标字体 Font labelFont = new Font("宋体", Font.TRUETYPE_FONT, 12); // Y轴数据设置 NumberAxis vn = (NumberAxis) categoryplot.getRangeAxis(); vn.setUpperMargin(0.1); // 设置最大值是1 // vn.setUpperBound(1); // 设置数据轴坐标从0开始 // vn.setAutoRangeIncludesZero(true); // 数据显示格式是百分比 //DecimalFormat df = new DecimalFormat("0.0%"); DecimalFormat df = new DecimalFormat(); vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式 // X轴坐标的显示中文 domainAxis是X轴 CategoryAxis domainAxis = categoryplot.getDomainAxis(); domainAxis.setLabelFont(labelFont);// 轴标题 domainAxis.setTickLabelFont(labelFont);// 轴数值 // y轴设置 ValueAxis rangeAxis = categoryplot.getRangeAxis(); rangeAxis.setLabelFont(labelFont); // 轴标题 rangeAxis.setTickLabelFont(labelFont);// 轴数值 //categoryplot.setBackgroundPaint(new Color(238, 238, 255)); categoryplot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); // 创建折线图 CategoryDataset categorydataset = dataset2; // 0显示是柱状图,1显示折线图 categoryplot.setDataset(1, categorydataset); // 显示折线图,0,0坐标轴都在左侧 categoryplot.mapDatasetToRangeAxis(0, 0); // 设置横轴的label为45度 CategoryAxis categoryaxis = categoryplot.getDomainAxis(); categoryaxis.setMaximumCategoryLabelWidthRatio(4f); categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 在右边显示折线图的坐标和主题 // NumberAxis numberaxis = new NumberAxis("平均值"); // / numberaxis.setLabelFont(labelFont); // categoryplot.setRangeAxis(1, numberaxis); // 画折线图 LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer(); lineandshaperenderer.setToolTipGenerator(new StandardCategoryToolTipGenerator()); //显示数值 //lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); //lineandshaperenderer.setBaseItemLabelsVisible(true); categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);//设置折线图显示在柱形图上面 BasicStroke realLine = new BasicStroke(5.0f); // 设置实线 lineandshaperenderer.setSeriesStroke(0, realLine); lineandshaperenderer.setShapesVisible(false);//去掉折线的点 categoryplot.setRenderer(1, lineandshaperenderer); // 图例字体清晰 // 画柱状图 StackedBarRenderer renderer = new StackedBarRenderer(); //让柱子显示为一个平面图 renderer.setBarPainter(new StandardBarPainter()); renderer.setItemMargin(-0.01); renderer.setShadowVisible(false);//取消阴影 renderer.setItemLabelsVisible(true); // 设置柱子宽度 renderer.setMaximumBarWidth(0.03); // 设置柱子高度 renderer.setMinimumBarLength(0.1); // 设置柱的边框颜色 //renderer.setBaseOutlinePaint(Color.BLACK); // 设置柱的边框可见 renderer.setDrawBarOutline(true); // // 设置柱的颜色(可设定也可默认) renderer.setSeriesPaint(0, new Color(51, 102, 153)); //renderer.setSeriesPaint(1, new Color(255, 204, 153)); // 设置每个地区所包含的平行柱的之间距离 renderer.setItemMargin(0.4); // 显示数据 //renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); // 显示数据的格式是百分比 //renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", NumberFormat.getPercentInstance())); renderer.setItemLabelFont(new Font("黑体", Font.BOLD, 12)); renderer.setItemLabelsVisible(true); // 数据显示格式是百分比 ItemLabelPosition itemLabelPositionFallback = new ItemLabelPosition( ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT, TextAnchor.HALF_ASCENT_LEFT, -1.57D); // 显示小于显示范围的数据 renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback); renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback); // 显示柱状图 categoryplot.setRenderer(0, renderer); /*ChartFrame pieFrame = new ChartFrame("折线图预警图",chart); pieFrame.pack(); pieFrame.setVisible(true); */ return chart; } public static String generateChart(HttpSession session, PrintWriter out, List<ChargeStaVo> list) throws IOException { String filename = null; CategoryDataset dataset1 = createDataset1(list); CategoryDataset dataset2 = createDataset2(list); JFreeChart chart = createChart("近"+list.size()+"天《武将杀》充值情况", "", "", dataset1, dataset2); /** * 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, 900, 350, info, session); ChartUtilities.writeImageMap(out, filename, info, false); } catch (IOException e) { e.printStackTrace(); } out.flush(); return filename; } }
相关推荐
在这个特定的案例中,我们关注的是如何利用JFreeChart来创建折线图和柱形图的混合图表,这种图表在数据可视化中非常常见,能够同时展示两个不同数据系列的趋势和比较。 首先,让我们深入了解一下JFreeChart的基本...
JFreeChart是一款强大的开源Java图表库,它提供了丰富的图表类型,包括柱状图、饼图、折线图、曲线图、散点图等,使得开发者能够轻松地在Java应用中插入美观且功能齐全的图表。在本篇内容中,我们将深入探讨如何利用...
JFreeChart 是一个开源的Java库,用于生成各种类型的图表,包括柱状图、饼图和曲线图等。它提供了一种灵活的方式来创建高质量的2D图表,可以在各种Java应用程序中使用,例如桌面应用、Web应用或者服务器端应用。下面...
JFreeChart是一款强大的Java库,用于创建各种类型的图表,如折线图、柱状图、饼图、散点图、甘特图等。这个库在IT行业中被广泛使用,特别是在需要进行数据可视化的应用程序中。它允许开发人员通过简单的API调用来...
JFreeChart是一款强大的开源Java图表库,它允许开发者创建各种复杂的图表,包括折线图、饼状图、柱状图、散点图、甘特图等多种类型。这个项目已经预置了各种图表示例,部署后可以直接运行,为用户提供直观的数据可视...
JFreeChart 是一个用于 Java 的开源图表库,它提供了一种简单的方法来创建各种复杂的图表,如饼状图、柱状图、折线图等。这个文档将详细介绍如何使用 JFreeChart 来生成这些常见的图表类型。 ### 一、生成饼状图 ...
JFreeChart 是一个用于创建高质量图表的开源 Java 库,它在 Java 开发中被广泛用于生成柱状图、折线图、饼状图等多种图表类型。这个示例项目旨在帮助开发者更好地理解和使用 JFreeChart,以在实际应用中展示数据。...
发现有关JFreeChar 拖拉的东西网上资源忒少,所以就花了点时间去研究了一下。这里面有柱状图,甘特图,折线图等拖拉的例子,相信对那些正在研究JFreeChar 和正在为JFreeChar 图形拖拉问题困扰的人有所帮助。
JFreeChart是一款强大的开源图表库,它提供了丰富的图表类型,包括折线图、柱状图、饼图、散点图、甘特图等,适用于各种数据分析和展示的需求。本文将详细介绍JFreeChart如何帮助开发者生成统计图表,并探讨其在项目...
1. 折线图(Line Charts):用于展示数据随时间变化的趋势。 2. 柱状图(Bar Charts):用于比较不同类别的数量或频率。 3. 饼图(Pie Charts):展示各部分占整体的比例。 4. 散点图(Scatter Plots):展示两个...
`jfreechart`是一款功能强大且开源的Java图表库,它支持多种类型的图表绘制,包括饼图、柱状图、折线图等。本篇文章将通过一个简单的示例来介绍如何使用`jfreechart`来绘制饼图。 #### 二、环境准备 在开始之前,...
JFreeChart是一款强大的开源Java图表库,它允许开发者创建各种复杂的图表,如柱状图、折线图、饼图、散点图等,广泛应用于数据分析、报告生成以及可视化应用中。在这个小案例中,我们将深入探讨如何使用JFreeChart...
JFreeChart是一个强大的开源Java库,用于生成各种高质量的图表,包括折线图、柱状图、饼图、散点图、甘特图以及更复杂的图表类型。这个"JfreeChar测试程序"是用于帮助开发者理解和实践如何使用JFreeChart库来创建和...
1. **图表类型多样**:JFreeChart支持多种图表类型,如折线图、柱状图、饼图、散点图、甘特图、热力图等,每种图表都有丰富的定制选项,可以调整颜色、样式、数据标签等,满足不同场景的需求。 2. **动态图表**:...
JFreeChart是一款强大的Java图表库,它为开发者提供了创建各种类型图表的能力,包括折线图、柱状图、饼图、散点图等。在Java应用程序、Web应用或报告系统中,JFreeChart是一个非常实用的工具,因为它可以帮助生成高...
1. **多样的图表类型**:JFreeChart 支持多种图表类型,包括折线图、柱状图、饼图、散点图、面积图、甘特图、热力图、雷达图等,满足了不同场景的数据可视化需求。 2. **自定义性高**:开发者可以通过设置各种属性...
JFreeChart 是一个开源的 Java 图表库,它提供了丰富的图表类型,包括折线图、柱状图、饼图、散点图等,广泛应用于数据分析、报告生成以及各类软件的可视化组件中。在给定的“JfreeChar 各种报表源码”压缩包中,...
1. **图表类型**:JFreeChart支持折线图、柱状图、饼图、散点图、甘特图等多种图表类型,满足数据分析和可视化需求。 2. **自定义样式**:可以调整颜色、字体、边框、背景等元素,为图表定制个性化样式。 3. **数据...
JFreeChart则是一个强大的Java库,用于生成各种图表,如折线图、柱状图、饼图等,适用于数据可视化。将这两者结合,我们可以创建交互式、动态的Web应用,以直观地展示复杂的数据。 首先,集成JFreeChart到Struts2...
**JFreeChart** 是一个广泛使用的Java库,用于创建各种类型的图表,如柱状图、折线图、饼图、散点图等。这个库在IT行业中尤其受到开发者们的青睐,因为它提供了丰富的功能来帮助他们生成高质量的可视化数据报告。...