Экспорт сложенных баров с помощью matlab2tikz в MATLAB работает странно

Экспорт сложенных баров с помощью matlab2tikz в MATLAB работает странно

Я создал сложенные столбцы в Matlab, как показано на рисунке. В окне рисунка Matlab это выглядит так:

сложенные бары

Для получения этого графика я использую следующую команду.

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

По сути, он отображает три сложенных столбца, каждый из которых содержит три данных, в 5 групп.

я используюplotBarStackGroupsфункция из обмена файлами matlab для построения такой фигуры. Функция для справки:

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 

Затем я экспортирую этот рисунок с помощью matlab2tikz в файл .tex и включаю его в свой отчет.

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

Мой латексный файл выглядит вот так.

\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}

Результаты выглядят примерно так:

захватывать

Кажется, что сложенные столбики движутся вверх. Я не знаю, почему. Любая помощь приветствуется.

решение1

Я задал тот же вопрос на GitHub. Один из них предложил обходной путь.

Проблема, похоже, в том, что столбчатые диаграммы не могут обрабатывать одновременно и сложенные, и сгруппированные данные. Обходной путь — манипулировать столбчатыми диаграммами в 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')

Результат:

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

Теперь, если мы экспортируем это с помощью matlab2tikz, а затем включим в файл .tex, это будет выглядеть так:

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

Так что я думаю, что это ограничение pgfplots. СпасибоОлег Комаровиз GitHub.

Если кто-то еще столкнется с подобной проблемой, надеюсь, это поможет.

Связанный контент