JFreeChart柱状图中单组柱子用不同颜色来显示的实现方法是自定义一个Renderer来继承BarRenderer类,然后重载getItemPaint(int i,int j)方法。

实现效果如下:

实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class CustomRenderer extends org.jfree.chart.renderer.category.BarRenderer { 
   
    /** 
     *  
     */ 
    private static final long serialVersionUID = 784630226449158436L; 
    private Paint[] colors; 
    //初始化柱子颜色 
    private String[] colorValues = { "#AFD8F8""#F6BD0F""#8BBA00""#FF8E46""#008E8E""#D64646" }; 
   
    public CustomRenderer() { 
        colors = new Paint[colorValues.length]; 
        for (int i = 0; i < colorValues.length; i++) { 
            colors[i] = Color.decode(colorValues[i]); 
        
    
   
    //每根柱子以初始化的颜色不断轮循 
    public Paint getItemPaint(int i, int j) { 
        return colors[j % colors.length]; 
    
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
public class CreateJFreeChartBarColor { 
   
    /** 
     * 创建JFreeChart Bar Chart(柱状图) 
     */ 
    public static void main(String[] args) { 
        // 步骤1:创建CategoryDataset对象(准备数据) 
        CategoryDataset dataset = createDataset(); 
        // 步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置 
        JFreeChart freeChart = createChart(dataset); 
        // 步骤3:将JFreeChart对象输出到文件,Servlet输出流等 
        saveAsFile(freeChart, "E:\\bar.png"500400); 
    
   
    // 保存为文件 
    public static void saveAsFile(JFreeChart chart, String outputPath, int weight, int height) { 
        FileOutputStream out = null
        try
            File outFile = new File(outputPath); 
            if (!outFile.getParentFile().exists()) { 
                outFile.getParentFile().mkdirs(); 
            
            out = new FileOutputStream(outputPath); 
            // 保存为PNG文件 
            ChartUtilities.writeChartAsPNG(out, chart, weight, height); 
            out.flush(); 
        catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        catch (IOException e) { 
            e.printStackTrace(); 
        finally
            if (out != null) { 
                try
                    out.close(); 
                catch (IOException e) { 
                    // do nothing 
                
            
        
    
   
    // 根据CategoryDataset生成JFreeChart对象 
    public static JFreeChart createChart(CategoryDataset categoryDataset) { 
        JFreeChart jfreechart = ChartFactory.createBarChart("学生统计图"// 标题 
                "学生姓名"// categoryAxisLabel (category轴,横轴,X轴的标签) 
                "年龄"// valueAxisLabel(value轴,纵轴,Y轴的标签) 
                categoryDataset, // dataset 
                PlotOrientation.VERTICAL, false// legend 
                false// tooltips 
                false); // URLs 
   
        Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12); 
   
        jfreechart.setTextAntiAlias(false); 
        jfreechart.setBackgroundPaint(Color.white); 
   
        CategoryPlot plot = jfreechart.getCategoryPlot();// 获得图表区域对象 
   
        // 设置横虚线可见 
        plot.setRangeGridlinesVisible(true); 
        // 虚线色彩 
        plot.setRangeGridlinePaint(Color.gray); 
        // 数据轴精度 
        NumberAxis vn = (NumberAxis) plot.getRangeAxis(); 
        // vn.setAutoRangeIncludesZero(true); 
        DecimalFormat df = new DecimalFormat("#0.0"); 
        vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式 
   
        // x轴设置 
        CategoryAxis domainAxis = plot.getDomainAxis(); 
        domainAxis.setLabelFont(labelFont);// 轴标题 
        domainAxis.setTickLabelFont(labelFont);// 轴数值 
        // Lable(Math.PI/3.0)度倾斜 
        // domainAxis.setCategoryLabelPositions(CategoryLabelPositions 
        // .createUpRotationLabelPositions(Math.PI / 3.0)); 
        domainAxis.setMaximumCategoryLabelWidthRatio(6.00f);// 横轴上的 Lable 
        // 是否完整显示 
   
        // 设置距离图片左端距离 
        domainAxis.setLowerMargin(0.1); 
        // 设置距离图片右端距离 
        domainAxis.setUpperMargin(0.1); 
        // 设置 columnKey 是否间隔显示 
        // domainAxis.setSkipCategoryLabelsToFit(true); 
        plot.setDomainAxis(domainAxis); 
        // 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确) 
        plot.setBackgroundPaint(new Color(255255204)); 
   
        // y轴设置 
        ValueAxis rangeAxis = plot.getRangeAxis(); 
        rangeAxis.setLabelFont(labelFont); 
        rangeAxis.setTickLabelFont(labelFont); 
        // 设置最高的一个 Item 与图片顶端的距离 
        rangeAxis.setUpperMargin(0.15); 
        // 设置最低的一个 Item 与图片底端的距离 
        rangeAxis.setLowerMargin(0.15); 
        plot.setRangeAxis(rangeAxis); 
   
        // 解决中文乱码问题(关键) 
        TextTitle textTitle = jfreechart.getTitle(); 
        textTitle.setFont(new Font("黑体", Font.PLAIN, 20)); 
        domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); 
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); 
        vn.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); 
        vn.setLabelFont(new Font("黑体", Font.PLAIN, 12)); 
        // jfreechart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); 
   
        // 使用自定义的渲染器 
                CustomRenderer renderer = new CustomRenderer(); 
        // 设置柱子宽度 
        renderer.setMaximumBarWidth(0.2); 
        // 设置柱子高度 
        renderer.setMinimumBarLength(0.2); 
        // 设置柱子边框颜色 
        renderer.setBaseOutlinePaint(Color.BLACK); 
        // 设置柱子边框可见 
        renderer.setDrawBarOutline(true); 
        // 设置每个地区所包含的平行柱的之间距离 
        renderer.setItemMargin(0.5); 
        jfreechart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); 
        // 显示每个柱的数值,并修改该数值的字体属性 
        renderer.setIncludeBaseInRange(true); 
        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
        renderer.setBaseItemLabelsVisible(true); 
        plot.setRenderer(renderer); 
        // 设置柱的透明度 
        plot.setForegroundAlpha(1.0f); 
   
        // 背景色 透明度 
        plot.setBackgroundAlpha(0.5f); 
   
        return jfreechart; 
    
   
    // 创建CategoryDataset对象 
    public static CategoryDataset createDataset() { 
        double[][] data = new double[][] { { 252440123333 } }; 
        String[] rowKeys = { "" }; 
        String[] columnKeys = { "张三""李四""王五""马六""陈七""赵八" }; 
        CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data); 
        return dataset; 
    
   
}

JFreeChart柱状图单组柱子的不同颜色显示的更多相关文章

  1. jfreeChart柱状图各属性详细设置

    一. 下载与环境配置 此最新版本为 1.0.13 解压jfreechart-1.0.13.zip 将lib目录下的jfreechart-1.0.13.jar .jcommon-1.0.16.jar 复 ...

  2. echarts柱状图每个柱子显示不同颜色,并且能够实现点击每种颜色影藏对应柱子的功能

    ---------------------------------------------------------代码区---------------------------------------- ...

  3. highcharts 柱状图在柱子顶部显示y轴数据

    var plotOptions={ column:{ //borderColor: "#CCCC66",//边框 shadow: true, //阴影 dataLabels:{ / ...

  4. ECharts在柱状图的柱子上方显示数量的方法

    在setOption()方法中的series配置中加上itemStyle配置 如下: series: [{ name: '人数', type: 'bar', data: [], //x轴对应列的值 i ...

  5. highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度

    highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度 作者:highcharts | 时间:2014-6-11 14:07:05 | [小  大] | ...

  6. ChartControl 折线图 柱状图

    添加折线图(柱状图) 拖动ChartControl到Form上 在Series Collection中添加Line(或Bar) DevExpress.XtraCharts.Series series1 ...

  7. Echarts堆积柱状图排序问题

    Echarts堆积柱状图排序是按照堆积柱状图的柱子高度进行从大到小(或者从小到大)进行排序,方便查阅各坐标情况.以下是我自己研发的方法,有不对的地方敬请谅解,随时欢迎指教. 排序后效果如下图: (1) ...

  8. Echart、Excel、highcharts、jfreechart对比

      Echart Excel highcharts jfreechart 柱状图 √ √ √ √ 条形图 √ √ √ √ 折线图 √ √ √ √ 面积图 √ √ √ √ 散点图 √ √ √ √ 气泡图 ...

  9. echarts细节的修改(2):矩形数图,柱状图,折线图,雷达图等

    1.矩形数图的配置,是直接拿饼图的配置 然后将type换成treemap. 修改类型 option.series.type = 'treemap'; 关闭面包屑导航 option.series.bre ...

随机推荐

  1. 深入学习使用ocr算法识别图片中文字的方法

    公司有个需求,简单点说需要从一张图片中识别出中文,通过python来实现,当然其他程序也行,只要能实现,而小编主要学习python,所以就提了python.一个小白在网上遨游了一天,终于找到一丝丝思绪 ...

  2. Spark RDD转换为DataFrame

    #构造case class,利用反射机制隐式转换 scala> import spark.implicits._ scala> val rdd= sc.textFile("inp ...

  3. vmware--查看链接克隆依赖关系

    我们都知道,虚拟机克隆有完全克隆和链接克隆两种克隆方式.当根据模版去链接克隆出很多机器时,时间一长或者把克隆后的机器改名了,我们就忘记了哪台机器是克隆出来的,哪台是直接装的.如果不小心把模版机器给删除 ...

  4. Ado.net和EF的区别

    ado.net EF作为微软的一个ORM框架,通过实体.关系型数据库表之间的映射,使开发人员可以通过操作表实体而间接的操作数据库,大大的提高了开发效率.这样一来,.net平台下,我们与底层数据库的交互 ...

  5. WebForm 【上传图片】【图片验证码】

     上传图片(带水印)  1.获取要上传的图片 2.加水印 3.保存下来 using System.Drawing;   --绘画类命名空间 图片最后要用绝对路径保存       Server.MapP ...

  6. iview 刷新滞后于html问题

    一.问题描述 每次刷新页面,下面的内容就会一闪而过. 一闪而过后恢复正常: 二.解决 问题代码: @*<span>修改密码</span>*@ @*<span>{{m ...

  7. Java框架之Struts2(三)

    一.几种国际化输出方式 国际化:国际化的本质,就是查找,替换.程序界面上输出的是国际化消息的 key 所对应的值.Struts2 中的国际化机制,会根据 key 到资源文件中找对应的文本来替换上面的k ...

  8. nginx跳转访问

    server { listen 8888; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; ...

  9. 深入理解Java虚拟机--阅读笔记三

    垃圾收集器 手机算法是内存回收的方法论,垃圾收集器是内存回收的具体实现. 并行:指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态 并发:值用户线程与垃圾收集线程同时执行(但并不一定是并行的) ...

  10. 多语言网站利器 rel="alternate" hreflang="x"

    下面是我在浏览网站时无意看到的,然后就搜了一下,感觉内容不错但我还没有测试,就转载过来做个备注,有时间了在翻过来看看 rel="alternate" hreflang=" ...