
図に示すように、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')
結果:
これを matlab2tikz を使用してエクスポートし、.tex ファイルに含めると、次のようになります。
これはpgfplotsの制限だと思います。オレグ・コマロフGitHub から。
他の誰かが同様の問題に直面した場合、それが役立つことを願っています。