JFreeChart柱状图的颜色设置与宽度分配

来源:互联网 发布:卡尔曼滤波c语言 编辑:程序博客网 时间:2024/06/05 15:17

JFreeChart柱状图的颜色设置与宽度分配

针对情况
1.在进行颜色的设置之后,柱状图变细不符合要求
2.发现x轴或y轴的刻度不能很好的与柱状图对应
情况1
情况2
一:首先来说一下颜色的设置
render.setSeriesPaint(0,Color.RED);
render.setSeriesPaint(1,Color.BLUE);
render.setSeriesPaint(2,Color.GRAY);

可以把他当做是一种**类型**

// 默认数据        DefaultCategoryDataset dataset = new DefaultCategoryDataset();        Set<String> keySet=ClassUtil.jyOVMap.keySet();        // 用户数据        for (int i = 0; i < list.size(); i++) {            dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OB,list.get(i).getReviewtype());        }
在配合
      render.setSeriesPaint(0,Color.RED);      render.setSeriesPaint(1,Color.BLUE);      render.setSeriesPaint(2,Color.GRAY);
由于这个数据里面只有一种类型,所以只有render.setSeriesPaint(0,Color.BLUE);这条语句得到的执行,那他出来的结果就是粗细相同,颜色一致为红,有十五条柱的柱状图(按本人的数据)

二:让前三根变成红色,后三根变成灰色:
如果用

for (int i = 0; i < list.size(); i++) {            dataset.addValue(list.get(i).getScore(),i,list.get(i).getReviewtype());        }
 再搭配 

十五条柱子十五种样式

 最后生成的图片为针对一

柱状图变成一条线

 如果用 
    render.setSeriesPaint(0,Color.RED);      render.setSeriesPaint(1,Color.BLUE);      render.setSeriesPaint(2,Color.GRAY);
再搭配
// 默认数据        DefaultCategoryDataset dataset = new DefaultCategoryDataset();        Set<String> keySet=ClassUtil.jyOVMap.keySet();        // 用户数据for (int i = 0; i < list.size(); i++) {            if(i<3){                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OA,list.get(i).getReviewtype());            }else if(i<12){                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OB,list.get(i).getReviewtype());            }else{                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OC,list.get(i).getReviewtype());            }        }
那么最后生成的图片就是针对情况2

与刻度不能对应
颜色分配总结:
类型(好比我代码中的ClassUtil.ZYJZG_OA)的个数决定了你每一组(好比我代码中的list.get(i).getReviewtype())数据中颜色的种类,就拿上面的代码来说,我们知道他每一组数据中其实应该包含三种颜色,但是由于我的代码中仅仅显示了某一种颜色,所以每一组只展示了一种颜色,他的宽的是颜色一致的宽度的三分之一
为了证明我的观点,我们将代码改成:

for (int i = 0; i < list.size(); i++) {            if(i<3){                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OA,list.get(i).getReviewtype());                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OB,list.get(i).getReviewtype());                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OC,list.get(i).getReviewtype());            }else if(i<12){                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OA,list.get(i).getReviewtype());                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OB,list.get(i).getReviewtype());                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OC,list.get(i).getReviewtype());            }else{                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OA,list.get(i).getReviewtype());                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OB,list.get(i).getReviewtype());                dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OC,list.get(i).getReviewtype());            }        }
他的生成结果是

三种颜色相加结果等于颜色一致的宽度
三.宽度还是颜色一致时候的宽度,但是颜色要达到前三根是红色,后三根是灰色
首先类型使用一种

// 默认数据        DefaultCategoryDataset dataset = new DefaultCategoryDataset();        Set<String> keySet=ClassUtil.jyOVMap.keySet();        // 用户数据        for (int i = 0; i < list.size(); i++) {            dataset.addValue(list.get(i).getScore(),ClassUtil.ZYJZG_OB,list.get(i).getReviewtype());        }
然后我们需要自定义一个类,继承IntervalBarRenderer,重写getItemPaint方法,其中这个方法中的参数f就是代表从0开始的第f跟柱子
public class CustomRenderer extends IntervalBarRenderer {    public Paint getItemPaint(int i, int j) {        if(j<3){            return Color.RED;        }else if(j<12){            return Color.BLUE;        }else{            return Color.GRAY;        }    }}
然后再代码中将原先的BarRenderer替换成自定义的CustomRenderer
//设置图形对象的属性                 BarRenderer render = new CustomRenderer();//自定义图形对象                 render.setShadowVisible(false);//取消柱子的阴影效果                 render.setDrawBarOutline(false);                  render.setMaximumBarWidth(0.4); //设置柱子宽度                  render.setMinimumBarLength(0.00); //设置柱子高度                  //在柱子上显示相应信息                  render.setBaseItemLabelsVisible(true);                  render.setBaseItemLabelPaint(Color.BLACK);//设置数值颜色,默认黑色                  render.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());                  //设置不显示边框线                 render.setDrawBarOutline(false);                 //render.setSeriesPaint(0,new Color(131,175,155));                //  render.setBarPainter( new StandardBarPainter() );//取消渐变色                 //render.setItemMargin(-0.01);                 plot.setRenderer(render);
注意最后plot.setRenderer(render);
// 获得图标区域对象                CategoryPlot plot = freeChart.getCategoryPlot();
生成图片

与颜色一致时柱子宽度一致