
Eu criei barras empilhadas no matlab conforme mostrado na figura. Na janela de figura do matlab fica assim:
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:
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:
Agora, se exportarmos isso usando matlab2tikz e incluí-lo no arquivo .tex, ficará assim:
Então acho que é uma limitação do pgfplots. Graças aOleg Komarovdo GitHub.
Se alguém enfrentar um problema semelhante, espero que ajude.