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. java基础之继承(一)

    虽然说java中的面向对象的概念不多,但是具体的细节还是值得大家学习研究,java中的继承实际上就是子类拥有父类所有的内容(除私有信息外),并对其进行扩展.下面是我的笔记,主要包含以下一些内容点: 构 ...

  2. Animate.css(一款有意思的CSS3动画库)

    官网:https://daneden.github.io/animate.css/ animate.css 是一款跨浏览器的动画库. 使用方式: 在页面的 <head>中引入样式文件: & ...

  3. POJ 3268 Silver Cow Party(Dijkstra算法求解来回最短路问题)

    题目链接: https://vjudge.net/problem/POJ-3268 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently n ...

  4. ASP.NET Web API 启用跨域访问

    自定义特性 要在WebApi中实现JSONP,一种方式是实现自定义特性  http://stackoverflow.com/questions/9421312/jsonp-with-asp-net-w ...

  5. 以前没有写笔记的习惯,现在慢慢的发现及时总结是多么的重要。 这一篇文章主要关于java多线程一些常见的疑惑点。因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,嘻嘻嘻、大家可以去参考一些那些书籍。我这个文章主要关于实际的一些问题。同时也算是我以后复习的资料吧,。还请大家多多指教。 同时希望多结交一些技术上的朋友。谢谢。

    在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 以下就是我们常见的问题了: 1. 为什么我们不能直接调用run()方法呢? 我的理解是:线程的运行 ...

  6. 怎样删除C/C++代码中的所有注释?浅谈状态机的编程思想

    K&R习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不允许嵌套”. 如果不考虑字符常量和字符串常量,问题确实很简单.只 ...

  7. 加快maven中jar包的下载速度,maven镜像收集

    maven下载jar包的默认仓库是http://my.repository.com/repo/path速度较慢,通过配置国内镜像提高下载速度 1.打开eclipse--->Window---&g ...

  8. 深入理解Java 8 Lambda(语言篇)

    State of Lambda by Brian Goetz 原文链接:http://lucida.me/blog/java-8-lambdas-insideout-language-features ...

  9. 使用普通用户执行 docker

    CentOS 版本 7.4,Docker 版本 docker-1.13 及以下 ll /var/run/docker.sock srw-rw----. 1 root root 0 May 25 14: ...

  10. 【代码笔记】Web-JavaScript-JavaScript 数据类型

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