weixin_42339908 2009-08-19 21:58
浏览 206
已采纳

请教jfreechart的两个问题

如下图:
[img]http://bbs.5d.cn/uploadFiles/2009-08/QE07C9ZGK8M5.jpg[/img]
1.我想把图例显示在图的左上角部分.
2.柱形图其实是由三部分组,支店总的改的,正常营收,额外营收(普通情况只有两部分,总的及实际的),这种柱形图怎么做,谢谢!!
3.另外要把图显示在jsp中,只有先生成图片,然后再显示吗?有没有更好的方法,能在jsp中传参数然后自动刷新显示.
谢谢!!!
[b]问题补充:[/b]
谢谢walsh
另再请教一下,必须是struts2和jfreechart整合之后才能用这种简单的实现方法,因为项目不是很大,所以不想使用struts框架之类的,想用直接jsp开发,嘿~

  • 写回答

4条回答 默认 最新

  • walsh_bupt 2009-08-20 19:24
    关注

    第一个问题:[color=red]图例显示在左上角是做不到的[/color]。可以显示在上,下,左,右。

    因为在API中只能设置这几个位置,相信楼主这个问题应该来说不是最重要的吧。

    第二个问题:

    [code="java"]public JFreeChart createStackedBarChart() {
    double[][] data = new double[][] { { 10, 8, 12, 10, 40 },
    { 18, 12, 20, 10, 60 } };
    String[] rowKeys = { "营收", "额外" };
    String[] columnKeys = { "分店A", "分店B", "分店C", "分店D", "总店" };
    CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);

        // 2:JFreeChart对象
        JFreeChart chart = ChartFactory.createStackedBarChart("营业图", // 图表标题
                "", // 目录轴的显示标签
                "", // 数值轴的显示标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例(对于简单的柱状图必须是false)
                false, // 是否生成工具
                false // 是否生成URL链接
                );
        chart.setTextAntiAlias(false);
        chart.setBackgroundPaint(Color.WHITE);
        chart.setTitle(new TextTitle("营业图", new Font("隶书", Font.BOLD, 25)));
        Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
        // 2 .3 Plot 对象 Plot 对象是图形的绘制结构对象
        CategoryPlot plot = chart.getCategoryPlot();
        plot.setRangeGridlinesVisible(true);
        plot.setRangeGridlinePaint(Color.gray);
        NumberAxis vn = (NumberAxis) plot.getRangeAxis();
        vn.setUpperBound(200);
        DecimalFormat df = new DecimalFormat("000");
        vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
        // DomainAxis (区域轴,相当于 x 轴), RangeAxis (范围轴,相当于 y 轴)
        CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setLabelFont(labelFont);// 轴标题
        domainAxis.setTickLabelFont(labelFont);// 轴数值
            domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);
        plot.setDomainAxis(domainAxis);
        // y轴设置
        ValueAxis rangeAxis = plot.getRangeAxis();
        rangeAxis.setLabelFont(labelFont);
        rangeAxis.setTickLabelFont(labelFont);
        // 设置最高的一个 Item 与图片顶端的距离
        rangeAxis.setUpperMargin(0.15);
        // 设置最低的一个 Item 与图片底端的距离
        rangeAxis.setLowerMargin(0.15);
        plot.setRangeAxis(rangeAxis);
    
        // Renderer 对象是图形的绘制单元
        StackedBarRenderer renderer = new StackedBarRenderer();
        // 设置柱子宽度
        renderer.setMaximumBarWidth(0.05);
        // 设置柱子高度
        renderer.setMinimumBarLength(0.1);
        // 设置柱的边框颜色
        renderer.setBaseOutlinePaint(Color.BLACK);
        // 设置柱的边框可见
        renderer.setDrawBarOutline(true);
    
        renderer.setSeriesPaint(0, new Color(204, 255, 204));
        renderer.setSeriesPaint(1, new Color(255, 204, 153));
    
        renderer.setItemMargin(0.4);
    
        renderer
                .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        renderer.setBaseItemLabelsVisible(true);
    
        plot.setRenderer(renderer);
        return chart;
    }[/code]
    

    运行结果如下图所示:
    [url]http://walsh.iteye.com/upload/attachment/138372/445c54ac-5c1c-3be3-b3d7-aacdac1aee3f.png[/url]

    第三个问题:

    当然有更好的办法了,上图实现的就是在JSP中显示的,并且可以自动刷新,从而显示最新的数据信息。用struts2和jfreechart可以很容易就实现了。不会生成任何中间图片文件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题