MATLAB で matlab2tikz を使用して積み上げ棒グラフをエクスポートすると、異常な動作をする

MATLAB で matlab2tikz を使用して積み上げ棒グラフをエクスポートすると、異常な動作をする

図に示すように、MATLAB で積み上げ棒グラフを作成しました。MATLAB の図ウィンドウでは次のようになります。

積み上げ棒グラフ

このプロットを取得するには、次のコマンドを使用します。

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

基本的に、3 つのデータを含む 3 つの積み上げバーを 5 つのグループにまとめてプロットします。

私が使うプロットバースタックグループこのような図をプロットするための 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')

私の LaTeX ファイルは次のようになります。

\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 に投稿しました。そのうちの 1 人が回避策を思いつきました。

問題は、棒グラフが積み重ねとグループ化の両方を同時に処理できないということのようです。回避策は、棒グラフを 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 から。

他の誰かが同様の問題に直面した場合、それが役立つことを願っています。

関連情報