Exportar barras apiladas usando matlab2tikz en MATLAB funciona de manera extraña

Exportar barras apiladas usando matlab2tikz en MATLAB funciona de manera extraña

He creado barras apiladas en matlab como se muestra en la figura. En la ventana de la figura de Matlab se ve así:

barras apiladas

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:

captura

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:

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

Ahora, si exportamos esto usando matlab2tikz y luego lo incluimos en un archivo .tex, se verá así:

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

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.

información relacionada