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')

내 라텍스 파일은 다음과 같습니다.

\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에서.

다른 사람이 비슷한 문제에 직면하면 도움이 되길 바랍니다.

관련 정보