`

Jfreechar混合图(折线图+柱状图)

 
阅读更多
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;
    }
 
}
 

 

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

相关推荐

    jfreeChar 折线图+柱形图(混合图) +最新Jar包及例子

    在这个特定的案例中,我们关注的是如何利用JFreeChart来创建折线图和柱形图的混合图表,这种图表在数据可视化中非常常见,能够同时展示两个不同数据系列的趋势和比较。 首先,让我们深入了解一下JFreeChart的基本...

    JFreeChar实现曲线图:lib+Demo

    JFreeChart是一款强大的开源Java图表库,它提供了丰富的图表类型,包括柱状图、饼图、折线图、曲线图、散点图等,使得开发者能够轻松地在Java应用中插入美观且功能齐全的图表。在本篇内容中,我们将深入探讨如何利用...

    jfreechar各种图

    JFreeChart是一款强大的Java库,用于创建各种类型的图表,如折线图、柱状图、饼图、散点图、甘特图等。这个库在IT行业中被广泛使用,特别是在需要进行数据可视化的应用程序中。它允许开发人员通过简单的API调用来...

    JFreeChar做各种图表

    JFreeChart是一款强大的开源Java图表库,它允许开发者创建各种复杂的图表,包括折线图、饼状图、柱状图、散点图、甘特图等多种类型。这个项目已经预置了各种图表示例,部署后可以直接运行,为用户提供直观的数据可视...

    JFreechar使用文档

    JFreeChart 是一个用于 Java 的开源图表库,它提供了一种简单的方法来创建各种复杂的图表,如饼状图、柱状图、折线图等。这个文档将详细介绍如何使用 JFreeChart 来生成这些常见的图表类型。 ### 一、生成饼状图 ...

    JfreeChar示例

    JFreeChart 是一个用于创建高质量图表的开源 Java 库,它在 Java 开发中被广泛用于生成柱状图、折线图、饼状图等多种图表类型。这个示例项目旨在帮助开发者更好地理解和使用 JFreeChart,以在实际应用中展示数据。...

    JFreeChar 图形拖拉

    发现有关JFreeChar 拖拉的东西网上资源忒少,所以就花了点时间去研究了一下。这里面有柱状图,甘特图,折线图等拖拉的例子,相信对那些正在研究JFreeChar 和正在为JFreeChar 图形拖拉问题困扰的人有所帮助。

    jfreechar 动态统计图

    1. 折线图(Line Charts):用于展示数据随时间变化的趋势。 2. 柱状图(Bar Charts):用于比较不同类别的数量或频率。 3. 饼图(Pie Charts):展示各部分占整体的比例。 4. 散点图(Scatter Plots):展示两个...

    JfreeChar测试程序

    JFreeChart是一个强大的开源Java库,用于生成各种高质量的图表,包括折线图、柱状图、饼图、散点图、甘特图以及更复杂的图表类型。这个"JfreeChar测试程序"是用于帮助开发者理解和实践如何使用JFreeChart库来创建和...

    jfreechar包

    JFreeChart是一款强大的Java图表库,它为开发者提供了创建各种类型图表的能力,包括折线图、柱状图、饼图、散点图等。在Java应用程序、Web应用或报告系统中,JFreeChart是一个非常实用的工具,因为它可以帮助生成高...

    jfreechar 图形报表

    1. **多样的图表类型**:JFreeChart 支持多种图表类型,包括折线图、柱状图、饼图、散点图、面积图、甘特图、热力图、雷达图等,满足了不同场景的数据可视化需求。 2. **自定义性高**:开发者可以通过设置各种属性...

    JfreeChar 各种报表源码

    JFreeChart 是一个开源的 Java 图表库,它提供了丰富的图表类型,包括折线图、柱状图、饼图、散点图等,广泛应用于数据分析、报告生成以及各类软件的可视化组件中。在给定的“JfreeChar 各种报表源码”压缩包中,...

    strut2+jfreechar生成图表

    JFreeChart则是一个强大的Java库,用于生成各种图表,如折线图、柱状图、饼图等,适用于数据可视化。将这两者结合,我们可以创建交互式、动态的Web应用,以直观地展示复杂的数据。 首先,集成JFreeChart到Struts2...

    jfreechar 例子下载

    JFreeChart 是一个开源的Java库,用于生成高质量的、多样的图表,包括折线图、柱状图、饼图、散点图等。这个"jfreechar 例子下载"很显然是一个包含JFreeChart使用示例的压缩包,旨在帮助学习者更好地理解和应用这个...

    JFreeChar报表

    这个库涵盖了多种图表类型,如柱状图、饼图、折线图、散点图、甘特图、面积图以及表格等,为数据分析和展示提供了丰富的选择。在项目中使用JFreeChart,可以轻松实现动态绑定数据,以直观、生动的方式展示数据。 **...

    jfreeChar相关jar包

    它支持各种类型的图表,包括但不限于折线图、柱状图、饼图、散点图、甘特图、热力图以及地理地图等。这些图表可以用于报表、仪表盘、Web应用等多种场景。JFreeChart的特点在于其高度定制性,开发者可以根据需求调整...

    jxl,jfreechar 总结

    例如,你可以先使用JXL读取Excel表格中的销售数据,再用JFreeChart生成对应的柱状图或折线图,以此来直观展示销售趋势。 总的来说,JXL和JFreeChart是Java开发者处理Excel数据和图表的得力工具,它们提供了丰富的...

    jfreechar实际例子

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,如饼图、柱状图、线图、散点图等。这个“jfreechar实际例子”压缩包很可能是包含了一些示例代码或者项目,用于演示如何在实际应用中使用...

    JFreeChar 例子源代码

    - **多样的图表类型**:JFreeChart 支持多种图表,包括柱状图、饼图、折线图、面积图、散点图、甘特图、雷达图等,满足不同场景的需求。 - **自定义能力**:可以调整图表的样式,例如颜色、字体、背景、图例等,以...

    JFreeChar的相关资料

    - **图表类型**:JFreeChart支持多种图表类型,如条形图(BarChart)、饼图(PieChart)、折线图(LineChart)、面积图(AreaChart)、散点图(ScatterPlot)等,满足不同数据可视化需求。 - **组件结构**:...

Global site tag (gtag.js) - Google Analytics