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. centos swap

    SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的.它类似于Windows中的虚拟内存.在Windows中,只可以使用文件来当作虚拟内存.而linux可以文件或者分区来当作 ...

  2. SaltStack数据系统-Grans详解

    1:Grains是系统的一个组件,存放着minion启动时收集的系统底层的一些信息,每次minion启动的时候,会进行系统的采集,将其保存下来,在以后的生命周期中不会重新搜集,除非重启~ #查看gra ...

  3. 从前端角度看ajax如何保护接口的安全性

    一.前言 在web中,使用Ajax调用API,撇开跨域不讲,怎么做安全验证,防止别的网站调用呢?假设没有做安全保障,任何用户都可以直接访问接口,这回暴露出极大的安全隐患. 二.后端怎么做? 1.一些接 ...

  4. 来自于一个问题的回答对自己的反思 php怎么发送邮件?发送邮件插件PHPMailer

    前言: 昨天用手机无意点了一下博问,看见了一个朋友问了一个关于php发邮件不能添加发件人名称的问题,试着看了一下代码,觉得自己发现了问题所在,谁知道只是一知半解没有真正发现问题所在,看来有一段时间没有 ...

  5. Postman接口测试_添加断言

    1.设置环境变量 postman.setEnvironmentVariable("key", "value");  例子: postman.setEnviron ...

  6. [POI 2009]Lyz

    Description 题库链接 初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双.已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的溜冰鞋.有 \(m\ ...

  7. Ubuntu安装SSH SERVER

    apt-get update apt-get install openssh-server 安装好后查看SSH是否启动 打开”终端窗口”,输入”sudo ps -e |grep ssh“–>回车 ...

  8. 【Java基础】15、负数的二进制表示方法

    在计算机中,负数以其正值的补码形式表达. 什么叫补码呢?这得从原码,反码说起. 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码. 比如 00000000 00000000 00000000 ...

  9. Hash table lengths and prime numbers

    Website:http://srinvis.blogspot.ca/2006/07/hash-table-lengths-and-prime-numbers.html This has been b ...

  10. Ashampoo Driver Updater - 阿香婆驱动安装

    Ashampoo Driver Updater 让系统更完美 – 永远有最新的驱动,出错或旧的驱动是每个电脑系统的恶梦.时不时,驱动会丢失或不可避免的过时.Ashampoo Driver Update ...