你好,我有点绝望。
由于似乎没有人关心我的上一篇帖子,我对我的问题进行了很多尝试,但仍然找不到解决方案。
我想matlab2tikz
将我的 matlab 图表包含到我的latex
文档中。
由于matlab2tikz
受到该社区和其他许多人的强烈推荐,我认为错误一定出在我的代码中。
我大大简化了我的 matlab 代码,但仍然找不到错误。
我的图形的 matlab 代码:
example_data1 = linspace(0,100,5);
x1 = 1:length(example_data1);
y1 = example_data1;
x2 = 1:length(example_data1);
y2 = 2 * example_data1;
x3 = 1:length(example_data1);
y3 = 3 * example_data1;
Farbe1 = [0,1,0]*0.6; % darkgreen
Farbe2 = [1,0,0]*0.8; % darkred
Farbe3 = get(groot,'DefaultAxesColorOrder') % default values
Farbe3 = Farbe3(1,:); % default blue
figure(1)
% 3 axes
clf
%------------------------------------------------------------------
%-------------------------- plot1: ---------------------------
%------------------------------------------------------------------
a = plot(x1,y1,'green','LineWidth',2,'Color',Farbe1,...
'DisplayName','green plot')
ax1 = gca;
ax1.XLim = [0 length(x1)]
ax1.YLim = [0 max(y1)*1.5]
ax1.YTick = [0:25:300]
ax1.FontSize = 12;
%----------------------------------------------------------------
%-------------------------- plot2: --------------------------
%----------------------------------------------------------------
ax2 = axes('Position',ax1.Position);
b = plot(x2,y2,'blue','LineWidth',2,'Color',Farbe3,...
'DisplayName','blue plot')
ax2.Color = 'none';
ax2.XTick = [];
ax2.XLim = [0 length(x3)];
ax2.YAxisLocation = 'right';
ax2.FontSize = 12;
%----------------------------------------------------------------
%-------------------------- plot3: -------------------------
%----------------------------------------------------------------
ax3 = axes('Position',ax1.Position);
c = plot(x3,y3,'LineWidth',2,'Color',Farbe2,...
'DisplayName','red plot')
ax3.XTick = [];
ax3.YTick = [];
ax3.XLim = ax2.XLim;
ax3.YLim = ax2.YLim;
ax3.Color = 'none';
ax3.XAxisLocation = 'top';
ax3.YAxisLocation = 'right';
legend(ax3,[a,b,c])
% Run matlab2tikz
matlab2tikz('myfile.tex');
我需要这三个axes-objects
来在两个 y 轴和两个 x 轴上显示更复杂的数据。
myfile.tex
那么对我来说看起来像这样:
% This file was created by matlab2tikz.
%
%The latest updates can be retrieved from
% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz-matlab2tikz
%where you can also make suggestions and rate matlab2tikz.
%
\definecolor{mycolor1}{rgb}{0.00000,0.44700,0.74100}%
%
\begin{tikzpicture}
\begin{axis}[%
width=4.521in,
height=3.566in,
at={(0.758in,0.481in)},
scale only axis,
xmin=0,
xmax=5,
ymin=0,
ymax=150,
ytick={ 0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300},
axis background/.style={fill=white}
]
\addplot [color=black!40!green, line width=2.0pt, forget plot]
table[row sep=crcr]{%
1 0\\
2 25\\
3 50\\
4 75\\
5 100\\
};
\end{axis}
\begin{axis}[%
width=4.521in,
height=3.566in,
at={(0.758in,0.481in)},
scale only axis,
xmin=0,
xmax=5,
xtick={\empty},
ymin=0,
ymax=200,
yticklabel pos=right
]
\addplot [color=mycolor1, line width=2.0pt, forget plot]
table[row sep=crcr]{%
1 0\\
2 50\\
3 100\\
4 150\\
5 200\\
};
\end{axis}
\begin{axis}[%
width=4.521in,
height=3.566in,
at={(0.758in,0.481in)},
scale only axis,
xmin=0,
xmax=5,
xtick={\empty},
ymin=0,
ymax=200,
ytick={\empty},
xticklabel pos=right,
yticklabel pos=right,
legend style={legend cell align=left, align=left, draw=white!15!black, fill=white!94!black}
]
\addplot [color=black!20!red, line width=2.0pt]
table[row sep=crcr]{%
1 0\\
2 75\\
3 150\\
4 225\\
5 300\\
};
\addlegendentry{red plot}
\end{axis}
\end{tikzpicture}%
我在文档中调用此文件:
\documentclass{article}
\usepackage{amsmath}
\usepackage[latin1]{inputenc}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\input{myfile.tex}
\end{document}
编译此文档会导致此 pdf 带有不完整的图例。 我已查看以下问题以寻求帮助,但我认为它们不适合我的问题。 重叠, 传奇捕获, 图例位置,
尽管为三个图添加图例很常见,但似乎没有人在我之前遇到过这个问题,所以我认为我的代码中一定存在问题。但我想不出任何方法让它更简单,因为我需要这些命令来处理我的图表。
matlab2tikz
用途是否不同?
我也尝试通过编辑 来手动解决问题tikz-file
。我注意到只有最后一个axis-enviroment
有\addlegendentry{red plot}
。所以我尝试将另一个axis-enviroments
也放进去。我还将 添加到legend style={legend cell align=left, align=left, draw=white!15!black, fill=white!94!black}
这些中,axis-enviroments
因为我希望图例采用相同的样式。但不幸的是,这会导致很多语法错误。我放弃了这条路,因为这样的解决方案有点不令人满意,因为我想在许多图上使用类似的 matlab 代码,这意味着我每次都必须更改它。
希望这次有人能帮我。我不知道为什么上次没人愿意帮忙。也许我的问题不清楚,或者代码太复杂了。希望这次的问题更清楚一些。
任何帮助都将不胜感激。
答案1
如果您使用以下 matlab 代码,与 MWE 相比,一切都运行良好。因为我在那里使用了一个hold on
调用。但是,正如您在问题中提到的那样,您需要在同一张图中绘制多组数据,但使用不同的轴,除非您将数据缩放到每个数据集具有相同的绘制幅度,否则您无法使用此解决方案。
正如 Manuel Kuehner 博士所指出的,这与 LaTeX 无关,而是与 matlab/matlab2tikz 有关。我想补充一点,尝试在同一张图中绘制太多数据可能并不重要,使用多个子图(tikz 中的轴)并排或叠放在一起可能就足够了。只要定位正确,它可能会起作用。
example_data1 = linspace(0,100,5);
x1 = 1:length(example_data1);
y1 = example_data1;
x2 = 1:length(example_data1);
y2 = 2 * example_data1;
x3 = 1:length(example_data1);
y3 = 3 * example_data1;
Farbe1 = [0,1,0]*0.6; % darkgreen
Farbe2 = [1,0,0]*0.8; % darkred
Farbe3 = get(groot,'DefaultAxesColorOrder') % default values
Farbe3 = Farbe3(1,:); % default blue
figure(1)
hold on
%-------------------------- plot1: ---------------------------
a = plot(x1,y1,'green','LineWidth',2,'Color',Farbe1,'DisplayName','green plot');
%-------------------------- plot2: --------------------------
b = plot(x2,y2,'blue','LineWidth',2,'Color',Farbe3,'DisplayName','blue plot');
%-------------------------- plot3: -------------------------
c = plot(x3,y3,'LineWidth',2,'Color',Farbe2,'DisplayName','red plot')
legend([a,b,c])
hold off
% Run matlab2tikz
matlab2tikz('myfile.tex','Standalone',true);