Exportando barras empilhadas usando matlab2tikz no MATLAB funcionando de forma estranha

Exportando barras empilhadas usando matlab2tikz no MATLAB funcionando de forma estranha

Eu criei barras empilhadas no matlab conforme mostrado na figura. Na janela de figura do matlab fica assim:

barras empilhadas

Eu uso o seguinte comando para obter esse gráfico.

plotBarStackGroups(rand(5,3,3), [1:3])

Basicamente, ele plota 3 barras empilhadas juntas, com 3 dados cada, em 5 grupos.

eu usoplotBarStackGroupsfunção da troca de arquivos matlab para traçar tal figura. A função para referência:

function [] = plotBarStackGroups(stackData, groupLabels)
NumGroupsPerAxis = size(stackData, 1);
NumStacksPerGroup = size(stackData, 2);
groupBins = 1:NumGroupsPerAxis;
MaxGroupWidth = 0.65; % Fraction of 1. If 1, then we have all bars in groups touching
groupOffset = MaxGroupWidth/NumStacksPerGroup;
figure
    hold on; 
    xtick = [];   
for i=1:NumStacksPerGroup
    Y = squeeze(stackData(:,i,:));
    internalPosCount = i - ((NumStacksPerGroup+1) / 2);
    groupDrawPos = (internalPosCount)* groupOffset + groupBins;   
    h(i,:) = bar(Y, 'stacked');
    set(h(i,:),'BarWidth',groupOffset);
    set(h(i,:),'XData',groupDrawPos);
    xtick = [xtick; groupDrawPos(:)];
end
hold off;
set(gca,'XTickMode','manual');
xts = sort(xtick);
set(gca,'XTickLabelMode','manual','XTick',xts,'XTickLabel',groupLabels);
end 

Em seguida, exporto esta figura usando matlab2tikz para um arquivo .tex e a incluo em meu relatório.

matlab2tikz('filename','stackedplot.tex')

Meu arquivo de látex se parece com isso.

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{tikz,ifthen,pgfplots}
\usepackage{pgffor}


\begin{document}
\input{stackedplot.tex}
\end{document}

Os resultados são mais ou menos assim:

capturar

As barras empilhadas parecem subir. Eu não sei porque. Qualquer ajuda é apreciada.

Responder1

Postei a mesma pergunta no GitHub. Um deles apresentou uma solução alternativa.

O problema parece ser que os gráficos de barras não conseguem lidar com empilhados e agrupados ao mesmo tempo. A solução alternativa é manipular os gráficos de barras no matlab.

A = rand(5,3,4);

subplot(211)
plotBarStackGroups(A,1:4)

subplot(212)
sz = size(A);
B = NaN((sz(1)+1)*sz(2)-1,sz(3));
for ii = 1:sz(1)
    pos = (ii-1)*(sz(2)+1)+1:ii*(sz(2)+1)-1;
    B(pos,:) = A(ii,:,:);
end
bar(B,'stacked')

% Or equivalently
C = [A, NaN(sz(1),1,sz(3))];
C = reshape(permute(C, [2,1,3]),sz(1)*(sz(2)+1),sz(3));
bar(C(1:end-1,:),'stacked')

Resultado:

fbd0d9f0-e795-11e4-9e55-266f92b5990d

Agora, se exportarmos isso usando matlab2tikz e incluí-lo no arquivo .tex, ficará assim:

5f730126-e797-11e4-9458-1142c9459e3e

Então acho que é uma limitação do pgfplots. Graças aOleg Komarovdo GitHub.

Se alguém enfrentar um problema semelhante, espero que ajude.

informação relacionada