Мой совет будет пересмотреть свой рабочий процесс.
Вместо того, чтобы повторно использовать код Matlab для построения фигур и быть dissappointed при постоянно меняющихся выходов с matlab2tikz
, начать повторное использование вашего латекса код для построения фигуры и не беспокоиться о заговоре в Matlab больше (по крайней мере, не для красивых участков).
matlab2tikz
всего лишь генерирует латексный код на основе латекс-пакета pgfplots
. Понять работу этого пакета довольно легко, так как он должен быть похож на Matlab.
Итак, зачем беспокоиться и всегда позволять matlab2tikz
выполнять эту работу? Потому что снова и снова вы не будете полностью довольны результатами. Просто попробуйте написать pgfplots-code с нуля и просто загрузите данные из Matlab.
Вот удобная функция, которую я написал, чтобы создать латексные готовые текстовые файлы:
function output = saveData(filename, header, varargin)
in = varargin;
numCols = numel(in);
if all(cellfun(@isvector, in))
maxLength = max(cellfun(@numel, in));
output = cell2mat(cellfun(@(x) [x(:); NaN(maxLength - numel(x) + 1,1)],in,'uni',0));
fid = fopen(filename, 'w');
fprintf(fid, [repmat('%s\t',1,numCols),'\r\n'], header{:});
fclose(fid);
dlmwrite(filename,output,'-append','delimiter','\t','precision','%.6f','newline', 'pc');
else
disp('saveData: only vector inputs allowed')
end
end
Что, например, может выглядеть следующим образом, в случае Боде диаграммы:
w G0_mag G0_phase GF_mag GF_phase
10.000000 40.865743 -169.818991 0.077716 -0.092491
10.309866 40.345290 -169.511901 0.082456 -0.101188
10.629333 39.825421 -169.196073 0.087474 -0.110690
10.958700 39.306171 -168.871307 0.092787 -0.121071
11.298273 38.787575 -168.537404 0.098411 -0.132411
В ваш tikzpicture
вы можете просто загрузить файл на
\pgfplotstableread[skip first n=1]{mydata.txt}\mydata
и хранить т в переменную \mydata
.
Теперь проверьте pfgplots, как построить ваши данные. Вы найдете основную команду участка \addplot
\addplot table [x expr= \thisrowno{0}, y expr= \thisrowno{3} ] from \mydata;
, где вы непосредственно получить доступ к столбцам вашего текстового файла \thisrowno{0}
(запутанный, я знаю).
Что касается вашей проблемы с многих точек данных: pgfplots предлагает ключ each nth point={ ... }
чтобы ускорить процесс. Но я предпочел бы фильтровать/децитировать данные уже в Matlab. Также возможен другой способ, если у вас есть несколько точек данных, ключ smooth
разглаживает все.