在EXCEL的柱状图中,如何用一根柱子上的不同颜色表示多种数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在EXCEL的柱状图中,如何用一根柱子上的不同颜色表示多种数据相关的知识,希望对你有一定的参考价值。

大致就是这样的。在EXCEL的图表工具中似乎是柱状图标准格式的第3个类型

1、把柱改颜色
(1)同一系列设置为同一颜色:用鼠标在某系列柱子上单击,此时同一系列柱子中心出现一个选择点,然后从右键菜单中选“数据系列格式”,打开“图案”选项卡,在“填充颜色”中找一款颜色,确定即可。
(2)同一系列设置不同颜色:鼠标在某系列柱子上单击,此时同一系列柱子中心出现一个选择点,再在其中一个柱子上单击,这个柱子四周会出现9个选择点,然后从右键菜单中选“数据点格式”,会打开一个窗口,同样找到“图案”选项卡,在“填充颜色”中找一款颜色,确定即可。
2、改坚轴文字
用鼠标选中坚轴,从右键菜单中选“删除”,就会删掉原来的坚轴,然后用“绘图”工具栏中的“文本框”添加excel表格中,设置好大小、文字及格式后,对它进行“复制”,用几个就复制粘贴几个,把它们分别用鼠标拖到图表的原坚轴位置就行了。
参考技术A 柱形堆积图

LeetCode Java刷题笔记—84. 柱状图中最大的矩形

84. 柱状图中最大的矩形

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

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

困难难度,这道题比较抽象。一种思路是:首先我们以某一根柱子的高度作为矩形的高,那么当前柱子能够勾勒出的最大面积的矩形的宽度的左边界即为向左找到第一个高度小于当前柱子的柱子,右边界即为向右找到第一个高度小于当前柱子的柱子。然后我们对每一根柱子都进行上面的运算,最后取最大的值即可求得柱状图中的最大矩形面积。

有了思路之后,那么我们就可以使用暴力解法来实现这个算法:

public int largestRectangleArea( int[] heights )

   int maxArea = 0, length = heights.length;
   // 以每一根柱子的高度作为一个矩形的高,求最大矩形面积
   for( int i = 0; i < length; i++ )
      //w表示矩形宽度,h表示矩形高度
      int w = 1, h = heights[ i ], j = i;
      //向左查找高度大于等于当前柱子高度的连续的柱子
      while( --j >= 0 && heights[ j ] >= h )
         w++;
      
      //向右查找高度大于等于当前柱子高度的连续的柱子
      j = i;
      while( ++j < length && heights[ j ] >= h )
         w++;
      
      //将之前的最大面积与当前矩形面积比较,取较大的值
      maxArea = Math.max( maxArea, w * h );
   

   return maxArea;

上面的算法是正确的,但是运行之后很容易超出时间限制,因为时间复杂度为O(N^2)。另一种更加优化的方法是使用单调栈,但是也更加难懂。

栈内元素保持单调递增或单调递减的栈就被称为单调栈。单调递增栈就是从栈顶到栈底数据是从小到到;单调递减栈就是从栈顶到栈底数据是从大到小。

以单调递增栈为例,入栈规则为:如果新元素比栈顶元素小,则直接入栈;如果新元素比栈顶元素大,则弹出栈内元素直到栈顶比新元素小(或空栈),然后再入栈。

通过使用单调栈我们可以访问到下一个比他大(小)的元素,在需要通过比较前后元素的大小关系来解决问题时我们通常会使用到单调栈。

这一道题就非常适合使用单调栈来求解,我们使用一个基于高度的单调递减栈,同时栈元素存放柱体的索引位置。

对于柱体数组进行遍历,若当前的柱体高度大于等于栈顶柱体的高度,就直接将当前柱体入栈。注意由于单调栈的特性,栈内元素从顶到底部单调递减,那么实际上栈顶柱体的后一个柱体就是栈顶柱体的左边的第一个小于栈顶柱体的柱体。

而若当前的柱体高度小于栈顶柱体的高度,说明栈顶柱体找到了右边的第一个小于栈顶柱体的柱体,那么此时就知晓了栈顶柱体的左右两个边界柱体的索引位置,自然就可以将栈顶柱体出栈并计算以其为高的矩形的面积了。当栈顶柱体出栈并且计算之后,还要将当前柱体与新的栈顶柱体高度继续比较,知道满足最小栈的特性,当前柱体的索引位置才能入栈。

这个算法的优点就是对于计算了的柱体将会直接出栈,不会重复的比较和计算,降低了时间复杂度。

public int largestRectangleArea( int[] heights )

   int len = heights.length;
   if( len == 0 )
      return 0;
   
   if( len == 1 )
      return heights[ 0 ];
   
   int maxArea = 0;

   //拷贝数组,并在数组头尾添加一个值为0的哨兵节点,可以在最后强制所有元素出栈。
   int[] newHeights = new int[ len + 2 ];
   System.arraycopy( heights, 0, newHeights, 1, len );

   //辅助栈,实现单调递减栈,用于存放柱体的索引位置
   LinkedList<Integer> stack = new LinkedList<>();
   /*
    * 遍历新数组并且确定最大面积
    */
   for( int i = 0; i < newHeights.length; ++i )
      //如果当前柱体高度小于栈顶柱体高度,说明当前柱体是栈顶柱体的右边第一个小于栈顶柱体的柱体,那么可以计算栈顶柱体的最大面积
      while( !stack.isEmpty() && newHeights[ stack.getFirst() ] > newHeights[ i ] )
         //将栈顶柱体的索引位置出栈,并且获取栈顶柱体的高度
         //由于栈顶柱体已出栈,那么后序遍历将不会遇到该柱体,因此栈顶柱体的下一个柱体就是栈顶柱体的左边第一个小于栈顶柱体的柱体
         int h = newHeights[ stack.removeFirst() ];
         //栈顶柱体的最大宽度,注意此时宽度通过计算得到,而不是遍历得到
         //右边第一个小于栈顶柱体的柱体的索引减去左边第一个小于栈顶柱体的柱体的索引,再见减去1,就是当前栈顶柱体的最大宽度
         int w = i - stack.getFirst() - 1;
         //比较并取较大值
         maxArea = Math.max( maxArea, h * w );
      
      //遍历结束,此时栈内的柱体都小于当前柱体的高度,那么当前柱体的索引位置入栈
      stack.addFirst( i );
   
   return maxArea;

以上是关于在EXCEL的柱状图中,如何用一根柱子上的不同颜色表示多种数据的主要内容,如果未能解决你的问题,请参考以下文章

ECharts柱状图中设置柱子为不同的颜色

excel画MACD柱状图,怎么让大于0的柱子变红色,小于0的绿色?

EXCEL柱状图两棵柱子的间距怎么调大

LeetCode Java刷题笔记—84. 柱状图中最大的矩形

如何用excel表格做韦恩图

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