Search code examples
matlabpie-chartgraphing

Is there a limit to the amount of data you can put in a MATLAB pie/pie3 chart?


I have everything going swimmingly on my pie chart and 3D pie charts within MATLAB for a dataset, however, I noticed that even though I have 21 pieces of data for this pie-chart being fed into the pie-chart call, only 17 appear.

PieChartNums = [ Facebook_count, Google_count, YouTube_count, ThePirateBay_count,  StackOverflow_count,  SourceForge_count,  PythonOrg_count,  Reddit_count, KUmail_count, Imgur_count, WOWhead_count, BattleNet_count, Gmail_count, Wired_count, Amazon_count, Twitter_count, IMDB_count, SoundCloud_count, LinkedIn_count, APOD_count, PhysOrg_count];
labels = {'Facebook','Google','YouTube','ThePirateBay','StackOverflow', 'SourceForge', 'Python.org', 'Reddit', 'KU-Email',  'Imgur', 'WOWhead', 'BattleNet', 'Gmail', 'Wired', 'Amazon', 'Twitter', 'IMDB', 'SoundCloud', 'LinkedIn', 'APOD', 'PhysOrg'};
pie3(PieChartNums)
legend(labels,'Location','eastoutside','Orientation','vertical')

This goes for the labels and the physical graph itself.

Pie Chart

Excuse the poor formatting in terms of the percentage cluster, this is just a rough version. I tried every orientation and even splitting labels between the orientations without any luck.

Quasi-better resolution for Pie Chart -- Imgur Link


Solution

  • Like Daniel said - it appears that there simply isn't any non-negative data for the missing slices. I tried reproducing your problem with the following initialization, yet it resulted in normal-looking chart:

    [ Facebook_count, Google_count, YouTube_count, ThePirateBay_count, ...
      StackOverflow_count,  SourceForge_count,  PythonOrg_count,  Reddit_count, ...
      KUmail_count, Imgur_count, WOWhead_count, BattleNet_count, Gmail_count, ...
      Wired_count, Amazon_count, Twitter_count, IMDB_count, SoundCloud_count, ...
      LinkedIn_count, APOD_count, PhysOrg_count] = deal(0.04);
    

    In order to verify this hypothesis - could you provide the data you're using for the chart? Do you get any warnings when plotting the chart?


    From inside the code of pie.m:

    if any(nonpositive)
      warning(message('MATLAB:pie:NonPositiveData'));
      x(nonpositive) = [];
    end
    

    and:

    for i=1:length(x)
      if x(i)<.01,
        txtlabels{i} = '< 1%';
      else
        txtlabels{i} = sprintf('%d%%',round(x(i)*100));
      end
    end
    

    You can see that MATLAB doesn't delete valid slices, but only renames them if the data values are small.