执行matlab2tikz后图例不完整

执行matlab2tikz后图例不完整

你好,我有点绝望。

由于似乎没有人关心我的上一篇帖子,我对我的问题进行了很多尝试,但仍然找不到解决方案。

我想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 轴上显示更复杂的数据。

matlab代码如下: 在此处输入图片描述

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

相关内容