你的柱状图(JFreeChart)为啥每根柱子的颜色都不一样,怎么做到的????

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你的柱状图(JFreeChart)为啥每根柱子的颜色都不一样,怎么做到的????相关的知识,希望对你有一定的参考价值。

默认就可以了。。你也可以一个一个设置。。
BarRenderer3D renderer = new BarRenderer3D();// 3D属性修改
// 设置没个柱子的颜色,0代表第一个柱子,依次往右
renderer.setSeriesPaint(0, Color.blue);
renderer.setSeriesPaint(1, Color.blue);
renderer.setSeriesPaint(2, Color.blue);
renderer.setSeriesPaint(3, Color.blue);
renderer.setSeriesPaint(4, Color.blue);
.............追问

我的柱状图是同一类型的数据,如水果(包括苹果、桃子、香蕉)。
但上面的方法应该是针对不同类型的数据的吧。我试过,仍然没用啊。
可否给我看看你的完整代码??????

追答

代码有点长。。发不过去,我发你QQ邮箱吧。。。给我个邮箱地址。。

追问

不好意思,前几天没上网,没看到。
我的QQ邮箱是1158407469@qq.com。
给我发一下,谢谢。

来自:求助得到的回答
参考技术A 默认就可以了。。你也可以一个一个设置。。
BarRenderer3D renderer = new BarRenderer3D();// 3D属性修改
// 设置没个柱子的颜色,0代表第一个柱子,依次往右
renderer.setSeriesPaint(0, Color.blue);
renderer.setSeriesPaint(1, Color.blue);
renderer.setSeriesPaint(2, Color.blue);
renderer.setSeriesPaint(3, Color.blue);
renderer.setSeriesPaint(4, Color.blue);

装修问题就去 装饰e站通追问

我试了,不对啊。我的数据是这样加的。
String s="热销商品";
DefaultCategoryDataset defaultcategorydataset=new DefaultCategoryDataset();
defaultcategorydataset.addValue(100,s,苹果);
defaultcategorydataset.addValue(120,s,葡萄);
defaultcategorydataset.addValue(150,s,香蕉);
defaultcategorydataset.addValue(90,s,桃子);
请问你的数据是怎么加的,求你的代码??????????

84. 柱状图中最大的矩形(Largest Rectangle in Histogram)

题目描述:

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

 技术图片 

以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。

示例:

输入: [2,1,5,6,2,3]
输出: 10

解题思路:

  这道题暴力解法就是依次遍历每根柱子,以这根柱子的高度为最小值,向左和向右寻找边界,即寻找第一个比该柱子低的柱子。这时左边界和右边界围起来的宽度乘以该柱子的高度就等于以这根柱子的高度为最小值的矩形的面积。依次枚举所有的柱子就可以得到面积的最大值,时间复杂度为O(n2),提交暴力解法会超时。

  这道题有O(n)的解法,就是使用单调栈。总的思路是遍历三次数组,第一次遍历得到每根柱子对应矩形的左边界,第二次遍历得到每根柱子对应矩形的右边界,第三次遍历得到最后的答案。左右边界的定义和暴力解法中的相同。那么如何用单调栈完成这个过程呢?

  比如第一次遍历中,从左到右开始遍历,假设此时遍历的下标为i。寻找i的左边界,就是寻找第一个小于heights[i]且位于i的左边的柱子。注意到我们遍历到i时,其实i左边的所有柱子都是遍历过的,那么就可以想到在遍历时就要记录下有用的信息,当遍历到i时可以直接使用该信息。想象一下,当从0开始遍历到i的过程,如果左边的柱子比右边的柱子高,那么左边的这根柱子一定是没用的。如果右边的柱子小于heights[i],那此时就已经终止了,所以不会考虑左边的柱子;当右边的柱子大于等于heights[i]时,那么左边的柱子一定也大于等于heights[i],所以第一个小于heights[i]的柱子(左边界)一定也不是它。综合下来就是只用保存左边的柱子比右边柱子小的情况。再接着往下思考,新加入一个柱子时,按照同样的思路,应该把栈中所有比它高的柱子都pop出来,因为那些柱子已经没用了。而这时栈顶的元素就刚好是第一个小于新加入柱子的柱子,也就是要寻找的左边界。至此找到左边界的过程就结束了,因为每次加入新柱子,在保存信息的同时(入栈)也可以得到左边界,所以顺序遍历一遍heights数组,就可以得到每根柱子对应的左边界。

  右边界同理可得,主要要从右往左遍历。最后只需要再遍历一次每根柱子,更新最大面积即可。当然也可以在遍历右边界时直接计算,不过这样的可读性稍微差一点。

  注意当栈为空时,保存的下标应该是-1或者heights的尾后下标,这样在计算面积时可以使用同一个面积计算公式。

  代码如下:

class Solution
{
public:
    int largestRectangleArea(vector<int>& heights)
    {
        stack<int> s;
        vector<int> left_bound(heights.size());
        for (int i = 0; i != heights.size(); ++i)
        {
            while (!s.empty() && heights[s.top()] >= heights[i])
                s.pop();
            left_bound[i] = s.empty() ? -1 : s.top();
            s.push(i);
        }

        s = stack<int>();
        vector<int> right_bound(heights.size());
        for (int i = heights.size() - 1; i >= 0; --i)
        {
            while (!s.empty() && heights[s.top()] >= heights[i])
                s.pop();
            right_bound[i] = s.empty() ? heights.size() : s.top();
            s.push(i);
        }

        int res = 0;
        for (int i = 0; i != heights.size(); ++i)
        {
            res = max(res, heights[i] * (right_bound[i] - left_bound[i] - 1));
        }
        return res;
    }
};

 

以上是关于你的柱状图(JFreeChart)为啥每根柱子的颜色都不一样,怎么做到的????的主要内容,如果未能解决你的问题,请参考以下文章

JFreeChart如何实现柱状图 一个柱子有多段数据

jfreechart柱形图 一个柱子上怎么弄多种颜色

Jfreechart柱状图如何让变成纯色

如何在highcharts柱状图初始化的时候在柱状图上显示数据

84. 柱状图中最大的矩形(Largest Rectangle in Histogram)

JFreeChart 之柱状图