
Ich habe in Matlab gestapelte Balken erstellt, wie in der Abbildung gezeigt. Im Matlab-Abbildungsfenster sieht es so aus:
Ich verwende den folgenden Befehl, um dieses Diagramm zu erhalten.
plotBarStackGroups(rand(5,3,3), [1:3])
Grundsätzlich werden drei gestapelte Balken mit jeweils drei Daten in fünf Gruppen dargestellt.
ich benutzePlotBarStackGroupsFunktion aus Matlab File Exchange, um eine solche Figur zu zeichnen. Die Funktion als Referenz:
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
Anschließend exportiere ich diese Abbildung mit matlab2tikz in eine TEX-Datei und füge sie meinem Bericht bei.
matlab2tikz('filename','stackedplot.tex')
Meine Latex-Datei sieht so aus.
\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}
Das Ergebnis sieht ungefähr so aus:
Die gestapelten Balken scheinen sich nach oben zu bewegen. Ich weiß nicht, warum. Für jede Hilfe bin ich dankbar.
Antwort1
Ich habe die gleiche Frage auf GitHub gepostet. Einer von ihnen hat einen Workaround vorgeschlagen.
Das Problem scheint darin zu liegen, dass Balkendiagramme nicht gleichzeitig gestapelt und gruppiert werden können. Die Problemumgehung besteht darin, die Balkendiagramme in Matlab zu bearbeiten.
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')
Ergebnis:
Wenn wir dies nun mit matlab2tikz exportieren und dann in die .tex-Datei einbinden, sieht es folgendermaßen aus:
Ich vermute, dass es sich um eine Einschränkung von pgfplots handelt. Vielen Dank anOleg Komarovvon GitHub.
Wenn jemand anderes ein ähnliches Problem hat, hoffe ich, dass es hilft.