Structs with Actual Advanced Data

Complicated Data in a Cell Array (Cell Matrix)

In [1]:
fruits_USDA = ...                                                               
    {09003, 'APPLES,RAW,WITH SKIN', 52, 0.26, 13.81, 2.4, 10.39,  ...           
                                    109, '1 cup, slices';                       
     09038, 'AVOCADOS,RAW,CALIFORNIA',167, 1.96, 8.64, 6.8, 0.3, ...            
                                    136, '1 fruit, without skin and seed';      
     09050, 'BLUEBERRIES,RAW', 57, 0.74, 14.49, 2.4, 9.96,...                   
                                    68,'50 berries';                            
     09070, 'CHERRIES,SWEET,RAW',63, 1.06, 16.01, 2.1, 12.82, ...               
                                    138, '1 cup, with pits yields';             
     09148,'KIWIFRUIT,GRN,RAW',61, 1.14, 14.66, 3, 8.99, ...                    
                                    69, '1 fruit,  (2" dia)';                   
     09176, 'MANGOS,RAW', 60, 0.82, 14.98, 1.6, 13.66, ...                      
                                    336, '1 fruit, without refuse';             
     09191, 'NECTARINES,RAW', 44, 1.06, 10.55, 1.7, 7.89, ...                   
                                    129, '1 small,  (2-1/3" dia)';              
     09316, 'STRAWBERRIES,RAW',32, 0.67, 7.68, 2, 4.89, ...                     
                                    152, '1 cup,  halves'};

Make each entry a struct

In [2]:
fruits_USDA = struct('number', 09003,'name', 'APPLES,RAW,WITH SKIN', ...         
                     'calories', 52, 'protein', 0.26, ...                       
                     'carbohydrates', 13.81, 'fiber', 2.4, 'sugar', 10.39, ...   
                     'scaling', 109, 'serving', '1 cup, slices');
In [3]:
fruits_USDA(2) = struct('number', 09038,'name', 'AVOCADOS,RAW,CALIFORNIA', ...  
                     'calories', 167, 'protein', 1.96, ...
                     'carbohydrates', 8.64, 'fiber', 6.8, 'sugar', 0.3, ...      
                     'scaling', 136, 'serving', '1 fruit, without skin and seed');

Alternative (shorter) syntax for creating a cell array of structs

In [4]:
fruits_USDA = struct(...                                                        
    'number', {9003, 9038, 9050, 9070, 9148, 9176, 9191, 9316},...              
    'name', {'APPLES,RAW,WITH SKIN','AVOCADOS,RAW,CALIFORNIA',...               
              'BLUEBERRIES,RAW','CHERRIES,SWEET,RAW','KIWIFRUIT,GRN,RAW',...    
              'MANGOS,RAW','NECTARINES,RAW','STRAWBERRIES,RAW'},...             
    'calories', {52   167    57    63    61    60    44    32},...              
    'protein', {0.2600 1.9600 0.7400 1.0600 1.1400 0.8200 1.0600 0.6700},...    
    'carbs', {13.8100 8.6400 14.4900 16.0100 14.6600 14.9800 10.5500 7.6800},...
    'fiber', {2.4000 6.8000 2.4000 2.1000 3.0000 1.6000 1.7000 2.0000},...      
    'sugar', {10.3900 0.3000 9.9600 12.8200 8.9900 13.6600 7.8900 4.8900},...   
    'scaling', {109   136    68   138    69   336   129   152},...              
    'serving', {'1 cup, slices','1 fruit, without skin and seed',...            
                '50 berries','1 cup, with pits yields','1 fruit,  (2" dia)',... 
                '1 fruit, without refuse','1 small,  (2-1/3" dia)',...          
                '1 cup,  halves'});
In [5]:
fruits_USDA(1)
ans =

  scalar structure containing the fields:

    number =  9003
    name = APPLES,RAW,WITH SKIN
    calories =  52
    protein =  0.26000
    carbs =  13.810
    fiber =  2.4000
    sugar =  10.390
    scaling =  109
    serving = 1 cup, slices

Complicated Plotting with Bar Charts

In [6]:
fruits_USDA = struct(...                                                        
    'number', {9003, 9038, 9050, 9070, 9148, 9176, 9191, 9316}, ...             
    'name', {'APPLES,RAW,WITH SKIN','AVOCADOS,RAW,CALIFORNIA', ...              
        'BLUEBERRIES,RAW','CHERRIES,SWEET,RAW','KIWIFRUIT,GRN,RAW', ...         
        'MANGOS,RAW','NECTARINES,RAW','STRAWBERRIES,RAW'}, ...                  
    'calories', {52   167    57    63    61    60    44    32}, ...             
    'protein', {0.2600 1.9600 0.7400 1.0600 1.1400 0.8200 1.0600 0.6700}, ...   
    'carbs', {13.8100 8.6400 14.4900 16.0100 14.6600 14.9800 10.5500 7.6800}, ...
    'fiber', {2.4000 6.8000 2.4000 2.1000 3.0000 1.6000 1.7000 2.0000}, ...     
    'sugar', {10.3900 0.3000 9.9600 12.8200 8.9900 13.6600 7.8900 4.8900}, ...  
    'scaling', {109   136    68   138    69   336   129   152}, ...             
    'serving', {'1 cup, slices','1 fruit, without skin and seed', ...           
        '50 berries','1 cup, with pits yields','1 fruit,  (2" dia)', ...        
        '1 fruit, without refuse','1 small,  (2-1/3" dia)', ...                 
        '1 cup,  halves'}, ...                                                  
    'protein_stats', {[0.019 0.17 0.57], [0.156 1.53 3], [0.019 0.6 0.97], ...  
                      [0.075 0.94 1.2], [0.116 0.8 1.6], [0.153 0.44 1.14], ... 
                      [0.060 0.82 1.26], [0.026 0.51 0.89]});
In [7]:
bar([[fruits_USDA.protein]', [fruits_USDA.fiber]', [fruits_USDA.sugar]' ])      
set(gca, 'XTickLabel', {fruits_USDA.name}, 'XTickLabelRotation', 45)            
ylabel('Grams per 100 grams')                                                   
legend('protein', 'fiber', 'sugar');
Gnuplot Produced by GNUPLOT 5.2 patchlevel 6 0 2 4 6 8 10 12 14 APPLES,RAW,WITH SKIN AVOCADOS,RAW,CALIFORNIA BLUEBERRIES,RAW CHERRIES,SWEET,RAW KIWIFRUIT,GRN,RAW MANGOS,RAW NECTARINES,RAW STRAWBERRIES,RAW Grams per 100 grams protein protein gnuplot_plot_2a gnuplot_plot_3a gnuplot_plot_4a gnuplot_plot_5a gnuplot_plot_6a gnuplot_plot_7a gnuplot_plot_8a gnuplot_plot_9a gnuplot_plot_10a gnuplot_plot_11a gnuplot_plot_12a gnuplot_plot_13a gnuplot_plot_14a gnuplot_plot_15a gnuplot_plot_16a gnuplot_plot_17a fiber fiber gnuplot_plot_19a gnuplot_plot_20a gnuplot_plot_21a gnuplot_plot_22a gnuplot_plot_23a gnuplot_plot_24a gnuplot_plot_25a gnuplot_plot_26a gnuplot_plot_27a gnuplot_plot_28a gnuplot_plot_29a gnuplot_plot_30a gnuplot_plot_31a gnuplot_plot_32a gnuplot_plot_33a sugar sugar gnuplot_plot_35a gnuplot_plot_36a gnuplot_plot_37a gnuplot_plot_38a gnuplot_plot_39a gnuplot_plot_40a gnuplot_plot_41a gnuplot_plot_42a gnuplot_plot_43a gnuplot_plot_44a gnuplot_plot_45a gnuplot_plot_46a gnuplot_plot_47a gnuplot_plot_48a gnuplot_plot_49a
In [8]:
other_carbs = [fruits_USDA.carbs]'-...                                          
    [fruits_USDA.fiber]'-[fruits_USDA.sugar]';                                  
bar([[fruits_USDA.fiber]', [fruits_USDA.sugar]',...                             
    other_carbs], 'stacked')                                                    
set(gca, 'XTickLabel', {fruits_USDA.name}, 'XTickLabelRotation', 45)            
ylabel('Grams per 100 grams')                                                   
legend( 'fiber', 'sugar', 'other carbs');
Gnuplot Produced by GNUPLOT 5.2 patchlevel 6 0 5 10 15 20 APPLES,RAW,WITH SKIN AVOCADOS,RAW,CALIFORNIA BLUEBERRIES,RAW CHERRIES,SWEET,RAW KIWIFRUIT,GRN,RAW MANGOS,RAW NECTARINES,RAW STRAWBERRIES,RAW Grams per 100 grams fiber fiber gnuplot_plot_2a gnuplot_plot_3a gnuplot_plot_4a gnuplot_plot_5a gnuplot_plot_6a gnuplot_plot_7a gnuplot_plot_8a gnuplot_plot_9a gnuplot_plot_10a gnuplot_plot_11a gnuplot_plot_12a gnuplot_plot_13a gnuplot_plot_14a gnuplot_plot_15a gnuplot_plot_16a gnuplot_plot_17a sugar sugar gnuplot_plot_19a gnuplot_plot_20a gnuplot_plot_21a gnuplot_plot_22a gnuplot_plot_23a gnuplot_plot_24a gnuplot_plot_25a gnuplot_plot_26a gnuplot_plot_27a gnuplot_plot_28a gnuplot_plot_29a gnuplot_plot_30a gnuplot_plot_31a gnuplot_plot_32a gnuplot_plot_33a other carbs other carbs gnuplot_plot_35a gnuplot_plot_36a gnuplot_plot_37a gnuplot_plot_38a gnuplot_plot_39a gnuplot_plot_40a gnuplot_plot_41a gnuplot_plot_42a gnuplot_plot_43a gnuplot_plot_44a gnuplot_plot_45a gnuplot_plot_46a gnuplot_plot_47a gnuplot_plot_48a gnuplot_plot_49a
In [9]:
figure()                                                                        
hold on                                                                         
h1 = bar([fruits_USDA.protein]);                                                
for ifruit = 1:size(fruits_USDA,2)                                              
    %Plot standard deviation as error bar                                       
    h2 = errorbar(ifruit, fruits_USDA(ifruit).protein, ...                      
        fruits_USDA(ifruit).protein_stats(1),'m');                              
    %Plot min and max measurements                                              
    h3 = plot(ifruit, fruits_USDA(ifruit).protein_stats(2), 'ro',...            
        'MarkerFaceColor', 'r');                                                
    h4 = plot(ifruit, fruits_USDA(ifruit).protein_stats(3), 'rs',...            
        'MarkerFaceColor', 'm');                                                
end                                                                             
title('Protein content in fruits')                                              
set(gca, 'XTick', 1:8, 'XTickLabel', {fruits_USDA.name}, 'XTickLabelRotation', 45)
ylabel('Grams per 100 grams')                                                   
legend([h1 h2 h3 h4], {'Mean', 'Standard error', 'Min', 'Max'})
Gnuplot Produced by GNUPLOT 5.2 patchlevel 6 0 0.5 1 1.5 2 2.5 3 APPLES,RAW,WITH SKIN AVOCADOS,RAW,CALIFORNIA BLUEBERRIES,RAW CHERRIES,SWEET,RAW KIWIFRUIT,GRN,RAW MANGOS,RAW NECTARINES,RAW STRAWBERRIES,RAW Grams per 100 grams Protein content in fruits Mean Mean gnuplot_plot_2a gnuplot_plot_3a gnuplot_plot_4a gnuplot_plot_5a gnuplot_plot_6a gnuplot_plot_7a gnuplot_plot_8a gnuplot_plot_9a gnuplot_plot_10a gnuplot_plot_11a gnuplot_plot_12a gnuplot_plot_13a gnuplot_plot_14a gnuplot_plot_15a gnuplot_plot_16a gnuplot_plot_17a gnuplot_plot_18a gnuplot_plot_19a gnuplot_plot_20a gnuplot_plot_21a gnuplot_plot_22a gnuplot_plot_23a gnuplot_plot_24a gnuplot_plot_25a gnuplot_plot_26a gnuplot_plot_27a gnuplot_plot_28a gnuplot_plot_29a gnuplot_plot_30a gnuplot_plot_31a gnuplot_plot_32a gnuplot_plot_33a gnuplot_plot_34a gnuplot_plot_35a gnuplot_plot_36a gnuplot_plot_37a gnuplot_plot_38a gnuplot_plot_39a gnuplot_plot_40a gnuplot_plot_41a gnuplot_plot_42a gnuplot_plot_43a gnuplot_plot_44a gnuplot_plot_45a gnuplot_plot_46a gnuplot_plot_47a gnuplot_plot_48a gnuplot_plot_49a gnuplot_plot_50a gnuplot_plot_51a gnuplot_plot_52a gnuplot_plot_53a Standard error Standard error gnuplot_plot_55a Min Min Max Max gnuplot_plot_58a
In [ ]: