Skip to main content
3 of 6
Added some related questions to the topic without creating new question

Correct my use of BarChart labels

I need to make a good bar chart based on the table below (the number of nodes with its probability of falling correspond to each OF):

Table of data

Thanks to kglr I got the necessary BarChart:

data14GAOF = {{33/36, 3/36}, {11/36, 25/36}, {27/36, 8/36, 
    1/36}, {14/36, 22/36}, {13/36, 10/36, 2/36, 1/36, 1/36, 1/36, 
    2/36, 4/36, 1/36, 1/36}, {8/36, 16/36, 8/36, 4/36}};
labels14GAOF = 
  Style[#, FontSize -> 18, White] & /@ {"node 4", "node 9", "node 7", 
    "node 3", "node 5", "node 6", "node 8", "node 10", "node 11", 
    "node 13"};
grouplabels14GAOF = 
  Style[#, Black, Bold, FontSize -> 18] & /@ {"OF1(N-1)", "OF1", 
    "OF2(N-1)", "OF2", "OF3(N-1)", "OF3"};
labeleddata14GAOF = 
  Labeled[##, Axis] & @@@ 
   Transpose[{SortBy[-First[#] &] /@ (MapIndexed[
          Labeled[#, labels14GAOF[[#2[[1]]]], Center] &, #] & /@ 
        data14GAOF), grouplabels14GAOF}];

BarChart[labeleddata14GAOF, 
 ChartStyle -> {GrayLevel[0.1], GrayLevel[0.2], GrayLevel[0.3], 
   GrayLevel[0.4], GrayLevel[0.5], GrayLevel[0.6], GrayLevel[0.65], 
   GrayLevel[0.7], GrayLevel[0.75], GrayLevel[0.8],}, 
 ChartLayout -> "Stacked", ImageSize -> 900, 
 AxesStyle -> Directive[Black, 24], BarSpacing -> {0, 0.8}]

But, unfortunately, I didn't take something into account and, as a result, BarChart looks like (there is a mismatch in the last column which I marked):

enter image description here

There is a strong likelihood that I chose inappropriate way to visualize and represent results.

Two questions

  • What I have to do in order to get the right labels?
  • How to make the columns closer to each other in accordance with the grouping (group OF1, group OF2, group OF3).

Thanks for help m_goldberg!

Following your advice I tried to add my barchart:

data14GA = {{33/36, 3/36}, {11/36, 25/36}, {27/36, 1/36, 
    8/36}, {14/36, 22/36}, {1/36, 13/36, 1/36, 1/36, 2/36, 2/36, 
    10/36, 4/36, 1/36, 1/36}, {8/36, 8/36, 16/36, 4/36}};
labels14GA = {{"node 4", "node 9"}, {"node 4", "node 9"}, {"node 4", 
    "node 7", "node 9"}, {"node 4", "node 9"}, {"node 3", "node 4", 
    "node 5", "node 6", "node 7", "node 8", "node 9", "node 10", 
    "node 11", "node 13"}, {"node 4", "node 5", "node 9", "node 11"}};
grouplabels14GA = 
  Style[#, Black, Bold, FontSize -> 18] & /@ {"OF1(N-1)", "OF1", 
    "OF2(N-1)", "OF2", "OF3(N-1)", "OF3"};
labeleddata14GA = 
  MapThread[
   Labeled[#1, #2, Axis] &, {SortBy[-First[#] &] /@ 
     Apply[Labeled[#1, Style[#2, FontSize -> 16, White], Center] &, 
      Transpose /@ Transpose[{data14GA, labels14GA}], {2}], 
    grouplabels14GA}];
data14MOPSO = {{60/80, 20/80}, {23/40, 17/40}, {74/80, 4/80, 
    2/80}, {16/40, 24/40}, {8/80, 4/80, 7/80, 24/80, 3/80, 16/80, 
    4/80, 2/80, 12/80}, {3/40, 4/40, 1/40, 6/40, 4/40, 1/40, 21/40}};
labels14MOPSO = {{"node 9", "node 4"}, {"node 4", 
    "node 9"}, {"node 9", "node 4", "node 7"}, {"node 4", 
    "node 9"}, {"node 9", "node 4", "node 7", "node 3", "node 5", 
    "node 10", "node 11", "node 13", "node 14"}, {"node 3", "node 4", 
    "node 5", "node 9", "node 10", "node 11", "node 14"}};
grouplabels14MOPSO = 
  Style[#, Black, Bold, FontSize -> 18] & /@ {"OF1(N-1)", "OF1", 
    "OF2(N-1)", "OF2", "OF3(N-1)", "OF3"};
labeleddata14MOPSO = 
  MapThread[
   Labeled[#1, #2, Axis] &, {SortBy[-First[#] &] /@ 
     Apply[Labeled[#1, Style[#2, FontSize -> 16, White], Center] &, 
      Transpose /@ Transpose[{data14MOPSO, labels14MOPSO}], {2}], 
    grouplabels14MOPSO}];
BarChart[{labeleddata14GA, labeleddata14MOPSO}, 
 ChartStyle -> {GrayLevel[0.1], GrayLevel[0.2], GrayLevel[0.3], 
   GrayLevel[0.4], GrayLevel[0.5], GrayLevel[0.6], GrayLevel[0.65], 
   GrayLevel[0.7], GrayLevel[0.75], GrayLevel[0.8]}, 
 ChartLayout -> "Stacked", AxesStyle -> Directive[Black, 24], 
 BarSpacing -> {Automatic, .3}, ImageSize -> 800]

But it turned out incorrect (problem with the Bar dataset) and I tried another way:

data14GAMOPSO = {{33/36, 3/36}, {11/36, 25/36}, {27/36, 1/36, 
    8/36}, {14/36, 22/36}, {1/36, 13/36, 1/36, 1/36, 2/36, 2/36, 
    10/36, 4/36, 1/36, 1/36}, {8/36, 8/36, 16/36, 4/36}, {60/80, 
    20/80}, {23/40, 17/40}, {74/80, 4/80, 2/80}, {16/40, 
    24/40}, {8/80, 4/80, 7/80, 24/80, 3/80, 16/80, 4/80, 2/80, 
    12/80}, {3/40, 4/40, 1/40, 6/40, 4/40, 1/40, 21/40}};
labels14GAMOPSO = {{"node 4", "node 9"}, {"node 4", 
    "node 9"}, {"node 4", "node 7", "node 9"}, {"node 4", 
    "node 9"}, {"node 3", "node 4", "node 5", "node 6", "node 7", 
    "node 8", "node 9", "node 10", "node 11", "node 13"}, {"node 4", 
    "node 5", "node 9", "node 11"}, {"node 9", "node 4"}, {"node 4", 
    "node 9"}, {"node 9", "node 4", "node 7"}, {"node 4", 
    "node 9"}, {"node 9", "node 4", "node 7", "node 3", "node 5", 
    "node 10", "node 11", "node 13", "node 14"}, {"node 3", "node 4", 
    "node 5", "node 9", "node 10", "node 11", "node 14"}};
grouplabels14GAMOPSO = 
  Style[#, Black, Bold, FontSize -> 18] & /@ {"OF1(N-1)", "OF1", 
    "OF2(N-1)", "OF2", "OF3(N-1)", "OF3", "OF1(N-1)", "OF1", 
    "OF2(N-1)", "OF2", "OF3(N-1)", "OF3"};
labeleddata14GAMOPSO = 
  MapThread[
   Labeled[#1, #2, Axis] &, {SortBy[-First[#] &] /@ 
     Apply[Labeled[#1, Style[#2, FontSize -> 16, White], Center] &, 
      Transpose /@ Transpose[{data14GAMOPSO, labels14GAMOPSO}], {2}], 
    grouplabels14GAMOPSO}];
BarChart[labeleddata14GAMOPSO, 
 ChartStyle -> {GrayLevel[0.1], GrayLevel[0.2], GrayLevel[0.3], 
   GrayLevel[0.4], GrayLevel[0.5], GrayLevel[0.6], GrayLevel[0.65], 
   GrayLevel[0.7], GrayLevel[0.75], GrayLevel[0.8]}, 
 ChartLayout -> "Stacked", AxesStyle -> Directive[Black, 24], 
 BarSpacing -> {Automatic, .3}, ImageSize -> 1500]

new barchart

It is correct but it would be better to sowehow group the columns. In other words to separate the columns [OF1(N-1)+OF1], [OF2(N-1)+OF2], [OF3(N-1)+OF3] from each other a bit because they represent different functions. Two questions:

  • How it can be realised?
  • Is it possible to make a space between groups of labeleddata14GA and labeleddata14MOPSO as well?