Group Abstract Group Abstract

Message Boards Message Boards

1
|
14.1K Views
|
6 Replies
|
4 Total Likes
View groups...
Share
Share this post:

Grouped and stacked bar charts

Posted 13 years ago
Hi all,

What's the easiest way to get grouped, stacked bar charts? Has someone written a function that does this? I've tried through BarChart, but it doesn't seem to support dimensionality of the data (looked at BarSpacing option as well, nothing that I just need to visually separate groups, the list of stacked bars can be flat).

Igor
POSTED BY: Igor A
6 Replies

I have the same question, but the answers don´t address the original question. I want to make graphics like the one shown below. These types of graphs have multiple applications and should be easy to do. I found some complicated ways to do them.

enter image description here

Posted 5 years ago
POSTED BY: Jim Baldwin

Thank you Jim.
I still think sometimes stacked bars may be useful to illustrate some phenomena. Please see the following application I did: https://www.wolframcloud.com/env/ricardomar/Published/AnalizadorTablerosControlPRODI_v20.nb

Even though it is in Spanish, you can see that there are a lot of stacked bar charts showing a lot of information about each water utility. You can compare the performance of the different water utilities by looking at the total production of water ("P"), the amount billed ("F") and the amount actually collected (revenues) ("C"). Non revenue water is a very important problem all over the world. The stacked bars show how much water (or money) is lost in each concept.

The concepts are here: https://www.researchgate.net/figure/Standard-IWA-Water-Balance_fig1_228707498 the illustration is a sort of stacked bar chart.

Any ideas on how to show the balance in another way.

Regards, Ricardo

One way is to create a custom ChartElementFunction that takes the extra dimension of data as metadata. Here's an example in 3D that should illustrate the idea (and should be easily modifiable for your purposes.)

Brett 
In[1]:= ChartElementData[BarChart3D]
Out[1]= {"Cone", "Cube", "Cylinder", "DoubleProfileCube", "FadingCube", "GradientScaleCube", "ProfileCube", "SegmentScaleCube", "SquareWaveCube", "TriangleWaveCube"}

 ClearAll[StackedBar3D];
 StackedBar3D[scheme_, shape_String: "ProfileCube"][{{x0_, x1_}, {y0_, y1_}, {z0_, z1_}},
   val_, meta_]:=Block[{colorlist, n, offsets, heights},
   heights = Flatten[meta];
   offsets = Prepend[Accumulate[heights], 0];
   colorlist = Switch[scheme,_Integer, ColorData[scheme, "ColorList"],_List, scheme,_String, ColorData[scheme, #] & /@ Range[0, 1,1/10]];
   n = Length[colorlist];
   Table[{colorlist[[Mod[i, n, 1]]],
     Tooltip[ChartElementData[shape][{{x0, x1}, {y0, y1}, {offsets[[i]], offsets[[i + 1]]}}, val, meta], heights[i]]}, {i, Length[offsets] - 1}]
  ]

d1 = RandomReal[1, {4, 4}];
d2 = RandomReal[1, {4, 4}];
d3 = RandomReal[1, {4, 4}];
d4 = RandomReal[1, {4, 4}];
data = MapThread[Plus[##] -> {##} &, {d1, d2, d3, d4}, 2];

BarChart3D[data, ChartElementFunction -> StackedBar3D["Rainbow"], ChartLayout -> "Grid"]

POSTED BY: Brett Champion
The BarChart function has an option called ChartLayout. You can see examples of it used in the documentation, like this example:
BarChart[RandomReal[1, {5, 4}], ChartLayout -> "Stacked"]
Is this what you are looking for? If not, maybe a quick picture will help us understand better what kind of bar chart you would like to make.
POSTED BY: Sean Clarke

But how can you have double stacked chartbars? For example, how can you show supply and demand for multiple locations? How can you show, for different regions, the supply and demand of water (e.g. on one side runoff and infiltration and on the other side use in agriculture, use in industry, use for public water supply)?

Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard