Skip to content
Snippets Groups Projects
gtStrainPlotCompHists.m 3.01 KiB
function hf = gtStrainPlotCompHists(inp, varargin)
% Plots histograms of the six strain components of all grains.

par.fontsize   = 12;
par.edgecolor  = [0.28 0.17 0.11]; %'w';
par.facecolor  = [0.28 0.17 0.11];
par.linecolor  = 'r';
par.boundnorm  = [-0.01 0.01];
par.boundshear = [-0.01 0.01];
par.binnorm    = 0.0002;
par.binshear   = 0.0002;
%par.ticks      = -0.05 : 0.002 : 0.05;

par = parse_pv_pairs(par, varargin);



if iscell(inp)
    % Store all strain tensors in an array
    st        = zeros(3, 3, length(inp));
    st(1,1,:) = gtIndexAllGrainValues(inp,'strain','strainT', 1,1);
    st(1,2,:) = gtIndexAllGrainValues(inp,'strain','strainT', 1,2);
    st(1,3,:) = gtIndexAllGrainValues(inp,'strain','strainT', 1,3);
    st(2,1,:) = gtIndexAllGrainValues(inp,'strain','strainT', 2,1);
    st(2,2,:) = gtIndexAllGrainValues(inp,'strain','strainT', 2,2);
    st(2,3,:) = gtIndexAllGrainValues(inp,'strain','strainT', 2,3);
    st(3,1,:) = gtIndexAllGrainValues(inp,'strain','strainT', 3,1);
    st(3,2,:) = gtIndexAllGrainValues(inp,'strain','strainT', 3,2);
    st(3,3,:) = gtIndexAllGrainValues(inp,'strain','strainT', 3,3);

elseif isnumeric(inp)
    st = inp;
end


hf = figure('name','Histograms of strain components','Units','normalized',...
            'Position',[0 0.5 0.5 0.5]);

hs(1) = subplot(2,3,1);
[minv(1), maxv(1)] = sfDrawHist(st, 1,1,'\epsilon_{11}', par);

hs(2) = subplot(2,3,2);
[minv(2), maxv(2)] = sfDrawHist(st, 2,2,'\epsilon_{22}', par);

hs(3) = subplot(2,3,3);
[minv(3), maxv(3)] = sfDrawHist(st, 3,3,'\epsilon_{33}', par);

hs(4) = subplot(2,3,4);
[minv(4), maxv(4)] = sfDrawHist(st, 2,3,'\epsilon_{23}', par);

hs(5) = subplot(2,3,5);
[minv(5), maxv(5)] = sfDrawHist(st, 1,3,'\epsilon_{13}', par);

hs(6) = subplot(2,3,6);
[minv(6), maxv(6)] = sfDrawHist(st, 1,2,'\epsilon_{12}', par);


ylims = get(hs,'ylim');
ylims = vertcat(ylims{:});

ymin = min(ylims(:,1));
ymax = max(ylims(:,2));

set(hs, 'xlim', [min(minv), max(maxv)])


for ii = 1:6
    plot(hs(ii), [0 0], [ymin ymax], 'LineStyle', '-.', 'LineWidth', 2,...
         'Color', par.linecolor)
end


end % of main function



%%%%%%%%%%%%%%%%%%%%%%%%%
%% Draw histogram
%%%%%%%%%%%%%%%%%%%%%%%%%
function [minval,maxval] = sfDrawHist(st, i1, i2, label, par)

    if (i1 == i2)
        edges = par.boundnorm(1) : par.binnorm : par.boundnorm(2);
        bins  = (par.boundnorm(1) + par.binnorm/2) : par.binnorm : (par.boundnorm(2) - par.binnorm/2);
    else
        edges = par.boundshear(1) : par.binshear : par.boundshear(2);
        bins  = (par.boundshear(1) + par.binshear/2) : par.binshear : (par.boundshear(2) - par.binshear/2);
    end
   
    hst = histc(squeeze(st(i1,i2,:)), edges);
    hst(end) = [];
    
    bar(bins, hst, 'FaceColor',par.facecolor, 'EdgeColor',par.edgecolor)
    set(gca, 'fontunits','points', 'fontsize',par.fontsize); %, 'XTick',par.ticks)
    xlabel(label, 'fontsize', par.fontsize)
    grid on
    hold on
    
    minval = find(hst,1,'first');
    maxval = find(hst,1,'last');
    
    minval = bins(minval);
    maxval = bins(maxval);
    
end