`
liumayulingyan
  • 浏览: 155577 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

JFreeChart展示柱状图和折线图的组合

阅读更多
//1.jquery调用ajax请求 
    $(document).ready(function() { 
        $.ajax({ 
            type: "POST", 
            url: "需要调用的url链接", 
            beforeSend :function() {//调用成功前前端显示内容 
                $("#testImgError").text("正在获取...");//可使用动态gif图片展示等待过程 
            }, 
            success: function(data) {//调用成功后前端处理 
                $("#testImgError").text("");                     
                $("#testImg").attr("src", "../test/"+data); 
            }, 
            error: function() {//前端调用错误处理 
                $("#testImgError").text("调用失败"); 
                $("#testImg").hide(); 
            } 
        });             
    }); 


//2.前端form中的显示,只需两行代码,可嵌入到相应的table或者div中: 
    <label id="testImgError"></label> 
    <img id="testImg" width=500 height=270 border=0>


//3.中后端的代码也不复杂,需要处理一下数据获取和图片的保存和发送过程,代码如下: 
    //3.1.数据获取 
    public void createTestImg() throws IOException { 
        //获取参数, id不能为空 
        Integer id = Integer.parseInt(this.getRequest().getParameter("id")); 
        //根据id获取数据         
        List distributed = testService.getData(id); 
 
        ChartConstruction mtd = new ChartConstruction(""); 
        JFreeChart demo = mtd.getTestChart(distributed); 
        //保存为图片,创建所需保存图片的文件夹 
        String prefix = "InvestTypeDistributed-"; 
        String path1 = "D://Chart//paperIrrByYear"; 
        File newPath = new File(path1); 
        if (!newPath.exists()) 
            newPath.mkdir(); 
        File tempFile1 = File.createTempFile(prefix, ".jpeg", newPath); 
        ChartUtilities.saveChartAsJPEG(tempFile1, demo, 500, 270);//实际JFreeChart保存图片方法 
 
        //向前台传递Json 
        sendJSON(distributed); 
    }
 //3.2.向前台发送Json,方法多种多样,大家可以根据需要自行编写 
    private void sendJSON(List distributed){ 
        Map<String, Object> map = new HashMap<String, Object>(); 
        if ((distributed == null) || (distributed.size() == 0)) 
            map.put("rows", new ArrayList<Object>()); 
        else 
            map.put("rows", distributed); 
        senderJson(this.getResponse(), map); 
    } 
    //3.3组织数据,两个dataset,形成柱状图和折线图的组合 
    public JFreeChart getTestChart(List distributed, Integer companyId, String begin, String end){ 
        //List distributed = peCompanyInvestAnalysisService.getCompanyMoneyTypeDistributed(companyId, begin, end); 
        DefaultCategoryDataset datasetSum = new DefaultCategoryDataset(); 
        DefaultCategoryDataset datasetNum = new DefaultCategoryDataset(); 
        Double maxSum = 0.0d; 
        Double minSum = 0.0d; 
        Double tempSum = 0.0d; 
        Integer maxNum = 0; 
        Integer minNum = 0; 
        Integer tempNum = 0; 
        if(distributed!=null) 
            for(int i=0;i<distributed.size();i++){ 
                Map mm=(Map)distributed.get(i); 
                if(mm.get("amount")==null) 
                    tempSum = 0.0d; 
                else 
                    tempSum = Double.parseDouble(mm.get("amount").toString()); 
                if(mm.get("num")==null) 
                    tempNum = 0; 
                else 
                    tempNum = Integer.parseInt(mm.get("num").toString()); 
                if(tempNum==null) 
                    tempNum = 0; 
                 
                datasetSum.addValue(tempSum, "投资币种", mm.get("moneyType").toString()); 
                datasetNum.addValue(tempNum,"投资项目数",mm.get("moneyType").toString()); 
            } 
 
        JFreeChart chart = creatChart("投资币种分布图",datasetSum,datasetNum); 
 
        return chart; 
    } 
    //3.4调用JFreeChart的api,创建图片样式 
    private JFreeChart creatChart(String title, DefaultCategoryDataset datasetSum, DefaultCategoryDataset datasetNum){ 
        //创建主题样式 
        StandardChartTheme standardChartTheme=new StandardChartTheme("CN"); 
        standardChartTheme.setExtraLargeFont(new Font("黑体",Font.BOLD,15)); //设置标题字体 
        standardChartTheme.setRegularFont(new Font("宋书",Font.PLAIN,12));//设置图例的字体 
        standardChartTheme.setLargeFont(new Font("宋书",Font.PLAIN,12));//设置轴向的字体 
        ChartFactory.setChartTheme(standardChartTheme);//应用主题样式 
 
            JFreeChart chart = ChartFactory.createBarChart( 
                title, // chart title 
                "", // x轴标题,domain axis label 
                "", // y轴标题,range axis label 
                datasetSum, // data 
                PlotOrientation.VERTICAL, // orientation 
                false, // include legend 
                true, // tooltips? 
                false // URLs? 
        ); 
        chart.setBackgroundPaint(Color.white); 
 
        CategoryPlot plot = (CategoryPlot) chart.getPlot(); 
        CategoryDataset categorydataset = datasetNum;       //设置第二个数据集 
        plot.setDataset(1, categorydataset); 
        plot.mapDatasetToRangeAxis(1, 1); 
        plot.setBackgroundPaint(Color.white); 
        plot.setRangeGridlinePaint(Color.white); 
        plot.setOutlinePaint(Color.white);  //设置图片边框颜色,去掉边框 
 
        //柱体的样式设计 
        BarRenderer renderer = (BarRenderer) plot.getRenderer(); 
        renderer.setSeriesPaint(0, Color.orange); 
        renderer.setDrawBarOutline(false); 
        //设置柱顶数据,API中居然没有StandardCategoryItemLabelGenerator这个类 
        renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
        renderer.setSeriesItemLabelsVisible(0, true); 
        //防止由于柱体太少而动态增加柱体宽度(JFreeChart默认是根据柱体多少而显示柱体宽度的) 
        int k = datasetSum.getColumnCount(); 
        if (k == 1) { 
            plot.getDomainAxis().setLowerMargin(0.26); 
            plot.getDomainAxis().setUpperMargin(0.66); 
        } else if (k < 6) { 
            double margin = (1.0 - k * 0.08) / 3; 
            plot.getDomainAxis().setLowerMargin(margin); 
            plot.getDomainAxis().setUpperMargin(margin); 
            ((BarRenderer) plot.getRenderer()).setItemMargin(margin); 
        } else { 
            ((BarRenderer) plot.getRenderer()).setItemMargin(0.1); 
        } 
 
        /*------设置Y轴----*/ 
        double unit=1d;//刻度的长度 
        //右边Y轴,相关属性设置 
        NumberAxis numberaxis1 = new NumberAxis(""); 
        unit=Math.floor(10);//刻度的长度 
        NumberTickUnit ntu= new NumberTickUnit(unit); 
        numberaxis1.setTickUnit(ntu); 
        numberaxis1.setRange(0,100);//刻度范围 
        plot.setRangeAxis(1, numberaxis1); 
        //左边Y轴 
        NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis(); 
        numberaxis .setAutoTickUnitSelection(false);         
        numberaxis.setRange(0.0, 100.0);//刻度的范围 
        ntu= new NumberTickUnit(unit); 
        numberaxis .setTickUnit(ntu); 
        /*------设置柱状体与图片边框的上下间距---*/ 
        numberaxis.setUpperMargin(0.05); 
        numberaxis.setLowerMargin(0.05); 
 
        /*------设置X轴----*/ 
        CategoryAxis domainAxis = plot.getDomainAxis(); 
        domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD); 
        /*------设置X轴标题的倾斜程度----*/ 
        domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)); 
        /*------设置柱状体与图片边框的左右间距--*/ 
        //domainAxis.setLowerMargin(0.01); 
        //domainAxis.setUpperMargin(0.01); 
 
        //设置折线图的样式 
        LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer(); 
        lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
        lineandshaperenderer.setBaseItemLabelsVisible(true); 
        lineandshaperenderer.setBaseItemLabelFont(new Font("隶书", Font.BOLD, 10)); 
 
        plot.setRenderer(1, lineandshaperenderer); 
        plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); 
        //图例1声明及相关样式设置 
        LegendTitle legendtitle = new LegendTitle(plot.getRenderer(0)); 
        //图例2声明及相关样式设置 
        LegendTitle legendtitle1 = new LegendTitle(plot.getRenderer(1)); 
        BlockContainer blockcontainer = new BlockContainer(new BorderArrangement()); 
        blockcontainer.add(legendtitle, RectangleEdge.LEFT); 
        blockcontainer.add(legendtitle1, RectangleEdge.RIGHT); 
        blockcontainer.add(new EmptyBlock(20D, 0.0D)); 
        CompositeTitle compositetitle = new CompositeTitle(blockcontainer); 
        compositetitle.setPosition(RectangleEdge.BOTTOM); 
        chart.addSubtitle(compositetitle); 
 
        chart.setAntiAlias(false); 
        chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); 
 
        return chart; 
    }



好的例子:http://blog.sina.com.cn/s/blog_906e353d0101241e.html


小知识点:
BasicStroke basicStroke = new BasicStroke(5.0f,// 线条粗细
                BasicStroke.CAP_ROUND,// 端点风格
                BasicStroke.JOIN_ROUND,// 折点风格
                1.0f,// 折点处理办法
                new float[]{ 1.0f },// 虚线数组
                0.0f);// 虚线偏移量
        renderer.setSeriesStroke(1, basicStroke);// 利用虚线绘制
分享到:
评论

相关推荐

    jfreechart 堆栈柱状图跟折线图结合拼接

    jfreechart 堆栈柱状图跟折线图结合拼接 jar包请戳http://download.csdn.net/detail/a156435646/7424707

    JFreeChart 折线、柱状组合图

    public JFreeChart createChart(String Ytitle, String title, CategoryDataset lineData, CategoryDataset barData) { //参考附件 return chart; } //struts 部分 &lt;!--begin 维优特例 --&gt; ...

    利用JFreeChart 实现柱状图,饼图,时序图,折线图等

    在Java编程环境中,JFreeChart库是一个非常强大的工具,它允许开发者轻松地创建各种图表,如柱状图、饼图、时序图和折线图等。这些图表在数据分析、报表展示以及各种可视化应用中非常常见。下面我们将详细介绍如何...

    java里用JFreeChart画柱状图、折线图、雷达图

    在Java编程环境中,JFreeChart库是一个强大的工具,用于创建各种复杂的图表,包括柱状图、折线图和雷达图。这些图表对于数据可视化和数据分析非常有用,可以帮助开发者直观地展示大量信息。以下是对给定文件中每个...

    jfreechart 生成折线图,饼图,柱状图,堆栈柱状图

    JFreeChart 是一个开源的Java库,用于生成高质量的2D图表,如折线图、饼图、柱状图和堆栈柱状图等。它广泛应用于数据分析、报告和应用程序中,提供丰富的自定义选项来满足各种视觉需求。在本项目中,你将找到能够...

    JFreeChart画图 饼状图 单组柱状图 多组柱状图 堆积柱状图 折线图

    JFreeChart 饼状图 柱状图 柱状图 堆积柱状图 折线图 这个是我特地开发的一个用JFreeChart开发的用来画图的项目,已经开发成形了各种项目的各种需求的项目,并且自己可以拓展,根据需求修改代码,完成项目的需要。 ...

    JfreeChart画双Y轴折线图

    在Java编程领域,JFreeChart是一个非常流行的图表库,它允许开发者创建各种复杂的数据可视化图形,包括折线图、柱状图、饼图等。在本篇博客中,"JfreeChart画双Y轴折线图"的主题,将探讨如何使用JFreeChart库来创建...

    java制作jfreechart柱状图 饼状图 折线图

    Java中的JFreeChart库是一个强大的工具,用于生成各种类型的图表,包括柱状图、饼状图和折线图。在本教程中,我们将深入探讨如何使用JFreeChart创建这些图表,以及如何用随机生成的数据作为数据源。 首先,...

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

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

    JFreeChart 饼图,柱图,折线图

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的图表,包括饼图、柱状图和折线图。在Java应用中,JFreeChart是一个不可或缺的工具,尤其在数据分析、报表生成或可视化数据的场景下。下面我们将深入...

    java绘制图表(柱状图、饼图、折线图)包 jfreechart

    这个库支持多种图表类型,包括柱状图、饼图和折线图,适用于数据分析、报告生成以及可视化展示等多种场景。在Java开发中,JFreeChart提供了一个简单易用的API,使得开发者可以轻松地将复杂的统计或业务数据转化为...

    JFreeChart图表,柱状图,折线图, 饼图等例子

    JFreeChart支持创建简单折线图和复杂折线图,可以设置线条样式、点标记、数据标签等。比如,你可以使用折线图来展示公司过去一年的月度收入变化。 3. **饼图(Pie Chart)**: 饼图将数据比例表示为整个部分的切片...

    web工程jFreeChart展示导出折线图

    它支持多种图表类型,如折线图、柱状图、饼图、散点图等,广泛应用于报表系统、数据分析应用和Web应用中。 ### 2. 创建Maven项目 首先,我们需要在IntelliJ IDEA中创建一个新的Maven项目。在`pom.xml`文件中,添加...

    jfreechart_生成折线图,饼图,柱状图,堆栈柱状图

    jfreechart 生成折线图、饼图、柱状图、堆栈柱状图 jfreechart 是一个功能强大且流行的 Java 图表库,用于生成各种类型的图表,包括折线图、饼图、柱状图、堆栈柱状图等。在本文中,我们将使用 jfreechart 1.0.8a ...

    Java JFreeChart 后台生成折线图

    Java JFreeChart库是用于创建高质量图表的开源项目,它为Java开发者提供了丰富的图形类型,如折线图、饼图和柱状图等。在Java后台生成这些图表,可以用于数据可视化,帮助用户更好地理解存储在数据库或其他数据源中...

    Struts2+JFreeChart+饼状图,柱状图,折线图

    在Struts2框架中集成JFreeChart库,可以方便地创建各种图表,如饼状图、柱状图和折线图,为数据分析和可视化提供便利。 JFreeChart是一个开源的Java类库,用于生成高质量的统计和财务图表。它支持多种图表类型,...

    jfreechart绘制的风速风向玫瑰图

    jfreechart是Java中一个流行的图表库,它提供了许多种类的图表,包括柱状图、折线图、饼图、雷达图等。本文主要介绍如何使用jfreechart绘制风速风向玫瑰图。 首先,了解jfreechart的基本结构。jfreechart的核心是...

    jfreechart绘制折线图(平面和3D)

    JFreeChart是一款强大的Java图形库,它允许开发者创建多种类型的图表,包括折线图、柱状图、饼图、散点图等。在本主题中,我们将深入探讨如何使用JFreeChart来绘制平面和3D的折线图。 首先,让我们了解折线图的基本...

    jfreechart 与struts2的柱状图以及折线图例子

    本篇文章将深入探讨如何在Struts2框架下利用JFreeChart创建柱状图和折线图。 **JFreeChart简介** JFreeChart是一个强大的Java图表库,它支持生成各种类型的图表,包括柱状图、折线图、饼图、散点图等。JFreeChart...

Global site tag (gtag.js) - Google Analytics