Code Bye

java 堆栈柱状图

 


 /**
     * 生成堆栈柱状图
     */
    public void makeStackedBarChart()
    {
        double[][] data =
            new double[][] { {1, 20, 30, 45, 25},
                {37, 17, 69, 25, 32}};
        String[] rowKeys = {"苹果", "梨子"};
        String[] columnKeys = {"北京", "上海", "广州", "成都", "深圳"};
        CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);
        createStackedBarChart(dataset, "x坐标", "y坐标", "柱状图", "stsckedBar.png");
    }

 /**
     * 堆栈柱状图
     * 
     * @param dataset
     * @param xName
     * @param yName
     * @param chartTitle
     * @param charName
     * @return
     */
    public String createStackedBarChart(CategoryDataset dataset, String xName,
        String yName, String chartTitle, String charName)
    {
        // 1:得到 CategoryDataset
        
        // 2:JFreeChart对象
        JFreeChart chart = ChartFactory.createStackedBarChart(chartTitle, // 图表标题
            xName, // 目录轴的显示标签
            yName, // 数值轴的显示标签
            dataset, // 数据集
            PlotOrientation.VERTICAL, // 图表方向:水平、垂直
            true, // 是否显示图例(对于简单的柱状图必须是false)
            false, // 是否生成工具
            false // 是否生成URL链接
        );
        // 图例字体清晰
        chart.setTextAntiAlias(false);
        
        chart.setBackgroundPaint(Color.WHITE);
        
        // 2 .2 主标题对象 主标题对象是 TextTitle 类型
        chart.setTitle(new TextTitle(chartTitle, new Font("隶书", Font.BOLD, 25)));
        // 2 .2.1:设置中文
        // x,y轴坐标字体
        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();
        // 设置最大值是1
        vn.setUpperBound(1);
        // 设置数据轴坐标从0开始
        //vn.setAutoRangeIncludesZero(true);
        // 数据显示格式是百分比
        DecimalFormat df = new DecimalFormat("0.00%");
        
        vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
        // DomainAxis (区域轴,相当于 x 轴), RangeAxis (范围轴,相当于 y 轴)
        CategoryAxis domainAxis = plot.getDomainAxis();
        
        domainAxis.setLabelFont(labelFont);// 轴标题
        domainAxis.setTickLabelFont(labelFont);// 轴数值
        
        // x轴坐标太长,建议设置倾斜,如下两种方式选其一,两种效果相同
        // 倾斜(1)横轴上的 Lable 45度倾斜
        // domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
        // 倾斜(2)Lable(Math.PI 3.0)度倾斜
        // domainAxis.setCategoryLabelPositions(CategoryLabelPositions
        // .createUpRotationLabelPositions(Math.PI / 3.0));
        
        domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的 Lable 是否完整显示
        
        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);
        
        plot.setRenderer(renderer);
        // 设置柱的透明度(如果是3D的必须设置才能达到立体效果,如果是2D的设置则使颜色变淡)
        // plot.setForegroundAlpha(0.65f);
        
        FileOutputStream fos_jpg = null;
        try
        {
            isChartPathExist(CHART_PATH);
            String chartName = CHART_PATH + charName;
            fos_jpg = new FileOutputStream(chartName);
            ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);
            return chartName;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
        finally
        {
            try
            {
                fos_jpg.close();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

上面是生成堆栈柱状图 代码。   
1:它的Y坐标 是百分百,我想改成 int类型那种…
2: 我想再图标上面显示每节颜色 是多少(具体数字)。

公司不能上传图片。  
 要看原型的话,我发个链接 给你们。 里面有饼状图等等…我也是找的
http://download.csdn.net/detail/zhengsiweizsw/3711375


25分
下载下来,还得仔细看,不过实施不上,不知为什么?

25分
JFreeChart 看官方api试试
引用 1 楼 ljc19901124 的回复:

下载下来,还得仔细看,不过实施不上,不知为什么?

我也想仔细看,,, 完全不知道他属性。  

w问题 解决了。 用iframe来。 控制2个链接不同的时间。 谢谢各位了。
您好,我问下getBarData()这个方法并没有定义啊,有详细的说明吗?谢谢

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java 堆栈柱状图