PGFPlot:新命令参数颜色不受尊重

PGFPlot:新命令参数颜色不受尊重

我创建了一个新命令,用于从文件打印图表。到目前为止一切顺利。现在我想向命令添加一个附加参数颜色

这是我目前所拥有的:

\newcommand{\plotvtf}[4]{%
    \ifthenelse{\isempty{#4}}{
        \renewcommand{\thiscolor}{}
    }{
        \renewcommand{\thiscolor}{color=#4}
        \StrSubstitute{#4}{/tikz/}{}[\thiscolor]%
    }%
    \addplot [ultra thick, \thiscolor, mark=none, smooth] table[x index=#2, y expr={abs(\thisrowno{#3})}, skip first n={11}, header=false] {#1};
}

所有这些仅适用于一个图表。但如果我对多个文件执行此操作,则所有图表都具有相同的颜色(上次使用的颜色。在本例中:粉色的):

\begin{tikzpicture}
\begin{axis}[title=Prägestempel 1-4]
\plotvtf{./graph/praegestempel-1.vtf}{2}{4}{black}
\plotvtf{./graph/praegestempel-2.vtf}{2}{4}{red}
\plotvtf{./graph/praegestempel-3.vtf}{2}{4}{blue}
\plotvtf{./graph/praegestempel-4.vtf}{2}{4}{pink}
\end{axis}
\end{tikzpicture}

我不太明白这背后的逻辑......!?

欢迎任何提示和评论。

答案1

我没有您的数据文件,所以我将使用数学表达式。您可以在绘图选项中直接使用颜色参数。这样不仅可以更改颜色,还可以更改绘图的线条样式。

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\newcommand{\plotvtf}[2][]{%
    \addplot+[ultra thick, mark=none, smooth,#1]{#2};
}

\begin{document}
\begin{tikzpicture}
\begin{axis}
\plotvtf[black]{x}
\plotvtf[red,dashed]{2*x}
\plotvtf[blue]{.5*x}
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

注意+后面的\addplot\addplot+使用正常循环列表并添加可选参数中的选项。没有 则+仅使用给定的选项。所以

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\newcommand{\plotvtf}[2][]{%
    \addplot+[ultra thick, mark=none, smooth,#1]{#2};
}

\begin{document}
\begin{tikzpicture}
\begin{axis}
\plotvtf{x}
\plotvtf{2*x}
\plotvtf{.5*x}
\end{axis}
\end{tikzpicture}
\end{document}

结果是

在此处输入图片描述


更新

这是您的文件的附加示例,\NewDocumentCommand来自\xparse@HenriMenke 的建议:

\documentclass[12pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\usepackage{xparse}
\NewDocumentCommand\plotvtf{m m m O{}}{
  \addplot+ [ultra thick, mark=none, smooth, #4]
    table[x index=#2, y expr={abs(\thisrowno{#3})}, skip first n={11}, header=false]
    {#1};
}

\begin{document}

\newcommand{\startschneiden}{4.87}
\newcommand{\startpraegen}{2.2}

\begin{tikzpicture}
  \begin{axis}[
    title=Auswerfer,
    width=\linewidth,
    height=8cm,
    grid=both,  
    minor x tick num=9,
    minor y tick num=1,
    xtick distance=1,
%       ytick distance=10,
    xlabel={Distanz vor OT $\left[ mm \right] $ }, 
    ylabel={Kraft in Tonnen $\left[ t \right] $},
    x dir=reverse, % umkehren, weil mm vor OT
%       y dir=reverse, % umkehren, weil Werte negativ sind
    ymin=-0.5, % unten links beschränken
    xmax=8.35, % mm vor OT, maximum. geht dann richtung null.
    xmin=-0.05,
    x tick label style={/pgf/number format/.cd, fixed, fixed zerofill, precision=1, /tikz/.cd},
    legend pos=north west,
    smooth,
    extra x ticks={\startschneiden, \startpraegen},
    extra x tick labels={Schneiden, Prägen},
    extra x tick style={x tick label style={yshift=-2ex,anchor=north, rotate=0, color=green!50!black},grid=major,major grid style={draw=green!50!black, very thick}},
    xlabel style={yshift=-3ex},
    ]

  \plotvtf{praegestempel-1.vtf}{2}{4}[black]
  \plotvtf{praegestempel-2.vtf}{2}{4}[orange]


  \legend{Präger 1, Präger 2, Präger 3, Präger 4};
  \node[draw=black, fill=white, fill opacity=0.8, text opacity=1] at (axis cs:7,4) [anchor=north west] {$F_{P max} = \pgfmathprintnumber{\pgfkeysvalueof{/pgfplots/ymax}}$};

  \end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容