
He creado barras apiladas en matlab como se muestra en la figura. En la ventana de la figura de Matlab se ve así:
Utilizo el siguiente comando para obtener este gráfico.
plotBarStackGroups(rand(5,3,3), [1:3])
Básicamente, traza 3 barras apiladas juntas, con 3 datos cada una, en 5 grupos.
yo sueloplotBarStackGroupsfunción del intercambio de archivos matlab para trazar dicha figura. La función de referencia:
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
Luego exporto esta figura usando matlab2tikz a un archivo .tex y la incluyo en mi informe.
matlab2tikz('filename','stackedplot.tex')
Mi archivo de látex se ve así.
\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}
Los resultados se parecen a esto:
Las barras apiladas parecen moverse hacia arriba. Yo no sé por qué. Se agradece cualquier ayuda.
Respuesta1
Publiqué la misma pregunta en GitHub. A uno de ellos se le ocurrió una solución.
El problema parece ser que los gráficos de barras no pueden manejar tanto apilados como agrupados al mismo tiempo. La solución es manipular los gráficos de barras en 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:
Ahora, si exportamos esto usando matlab2tikz y luego lo incluimos en un archivo .tex, se verá así:
Entonces supongo que es una limitación de pgfplots. Gracias aOleg Komárovde GitHub.
Si alguien más enfrenta un problema similar, espero que le ayude.