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. sql cast,convert,QUOTENAME,exec 函数学习记录

    语法 使用 CAST: CAST ( expression AS data_type ) 使用 CONVERT: CONVERT (data_type[(length)], expression [, ...

  2. Vuejs的指令及组件用法总结

    vuejs介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能 ...

  3. Java基础之循环语句、条件语句、switch case 语句

    Java 循环结构 - for, while 及 do...while 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. Java中有三种主要的循环结构: whi ...

  4. Xshell6设置字体大小

    Xshell可以远程连接到linux服务器,但有时终端字体太小,可以按照如下步骤修改字体大小: 菜单栏: 文件-属性-外观,修改字体大小后点击确定即可(也可以使用ALT+P快捷键打开属性).

  5. IS-IS笔记

    IS-IS:一般不会见到,唯一见到过一次是在BAT中某家的骨干网 |->CLNP (类似IP,IPX)|->CLNS->|->IS-IS (Routing,IGP)ISO-&g ...

  6. [转]group by 后使用 rollup 子句总结

    group by 后使用 rollup 子句总结 一.如何理解group by 后带 rollup 子句所产生的效果 group by 后带 rollup 子句的功能可以理解为:先按一定的规则产生多种 ...

  7. T-SQL:透视数据(十三)

    透视数据实际上就是行状态转为例状态 先加一张测试表 IF OBJECT_ID('dbo.Orders', 'U') IS NOT NULL DROP TABLE dbo.Orders; GO CREA ...

  8. Spring全家桶系列–SpringBoot之入门JPA

    //本文作者:cuifuan 什么是JPA? 一种规范,并非ORM框架,也就是ORM上统一的规范 用了之后可以做什么,为什么要用? 代码解释: 实体类 package com.example.spri ...

  9. 小程序和PHP学习笔记 ----- 不定期更新。

    学习tp5和小程序过程需要记住的重点记录 1,box-sizing: border-box; 规定两个并排的带边框的框 border-box 为元素设定的宽度和高度决定了元素的边框盒. 就是说,为元素 ...

  10. 【代码笔记】Web-JavaScript-JavaScript输出

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...