我在使用 TikZ 和 pgfplots 时遇到了一个相当奇怪的问题。我想让图例由变量驱动\foreach
,但 TikZ 不允许我这样做。我尝试了几种不同的方法,发现这\foreach
似乎在环境中不起作用axis
。
例如以下代码编译
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\foreach \x/\y in {1/A,2/C,3/D}
{
\draw (\x,-4pt) -- (\x,4pt) node [below,yshift=-2ex] {\y};
}
\begin{axis}
\addplot {sin(deg(x))};
\addlegendentry{2}
\end{axis}
\end{tikzpicture}
\end{document}
而这段代码没有
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\foreach \x/\y in {1/A,2/C,3/D}
{
\draw (\x,-4pt) -- (\x,4pt) node [below,yshift=-2ex] {\y};
}
\addplot {sin(deg(x))};
\addlegendentry{2}
\end{axis}
\end{tikzpicture}
\end{document}
答案1
您可以按照描述修改轴环境中的扩展方式这里作者:Christian。本文编译如下:
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\foreach \x/\y in {100/A,200/C,300/D}
{
\edef\temp{\noexpand\draw (\x,-4pt) -- (\x,4pt) node [below,yshift=-2ex] {\y};}
\temp
}
\addplot {sin(deg(x))};
\addlegendentry{2}
\end{axis}
\end{tikzpicture}
\end{document}
仍需要对值进行一些微调。但我建议使用 pgfplot 的功能代替\foreach
,例如\pgfplotsforeachungrouped
。