我正在尝试使用 TikZ 绘制图形。我有几个 .txt 文件,其中包含要绘制的曲线的坐标,列表如下
file2.txt,
file4.txt,
...
file30.txt
我想\plot
在轴环境中将它们与文件一起添加。此外,我想为它们添加不同的颜色,创建阴影效果,比如从蓝色到红色。
简而言之,我想创建一种轮廓图,但由于我没有 3D 功能,所以我必须导入坐标。
我编写了此代码,其中我在 中使用了两个变量\foreach
,一个用于文件名 \x,另一个用于颜色阴影 \y(参见“原始想法”行)。由于 \foreach 和轴环境之间存在某种问题,它无法正常工作。
我考虑过其他选择,比如阐明 \x 和 \y 之间的关系(参见代码行),使用\pgfplotsinvokeforeach
或其他技巧,\edef
但由于不同的原因它们不起作用:
如果我明确说明关系,它似乎不想计算 3*\x (未定义的控制序列)
上面
\pgfplotsinvokeforeach
写着“非法计量单位”同样
\edef
我阅读了一些关于使用\pgfplotsinvokeforeach
和技巧的主题,\edef
但可能我还没有正确理解如何在我的代码中使用它们。
你能给我一个解决方案吗?如果你能针对我提出的所有 4 种可能情况给出更正,那就更好了 :-)
以下是代码
\documentclass{article}
\usepackage{pgf,pgfsys,pgffor}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}
\begin{figure}
\begin{tikzpicture}
\newcommand{\filename}{./figure/regionDep0/orthogonal}
\begin{axis}[
xmin=0, xmax=1, ymin=0, ymax=1, width=8cm, height=8cm]
% Original idea: not working
\foreach \x/\y in {2/0,4/7,...,30/98}
{
\plot[color=blue!\y!red] file {\filename \x.txt};
}
%
% % substituting \y as function of \x: not working
% \foreach \x in {2,4,...,30}
% {
% \plot[color=blue!3*\x!red] file {\filename \x.txt};
% }
%
% % Trying with \pgfplotsinvokeforeach: not working
% \pgfplotsinvokeforeach{2,4,...,30}
% {
% \plot [color=blue!3*#1!red] file {\filename #1.txt};
% }
%
% % Trying with \edef\temp{...}: not working
% \foreach \x/\y in {2/0,4/7,...,30/98}
% {
% \edef\temp{\noexpand\plot [color=blue!\y!red] file {\filename \x.txt};}
% \temp
% }
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
答案1
如果您正在使用axis
PGFPlots 包提供的环境,则应该使用\addplot
而不是\plot
。
要为每个图使用不同的颜色,一种选择可能是将mesh
绘图类型与point meta=explicit
和一起使用meta expr=\i
。这样就可以使用颜色图,而不限于colorA!<value>!colorB
表达式:
\documentclass{article}
\usepackage{pgfplots} % Loads all required packages automatically
\usepackage{filecontents}
\begin{filecontents*}{file1.txt}
0 0
1 1
2 2
3 1
4 0
\end{filecontents*}
\begin{filecontents*}{file2.txt}
0 1
1 3
2 5
3 3
4 1
\end{filecontents*}
\begin{filecontents*}{file3.txt}
0 2
1 5
2 7
3 5
4 2
\end{filecontents*}
\begin{document}
\begin{figure}
\begin{tikzpicture}
\newcommand{\filename}{file}
\begin{axis}[
colormap/bluered
]
\foreach \i in {1,2,3}
{
\addplot +[thick, no markers, mesh, point meta=explicit] table [meta expr=\i] {\filename \i.txt};
}
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
或者(可能更好),contour prepared
如果将所有轮廓放入一个文件中,则可以使用绘图样式。这样,您甚至可以在轮廓上获得标签(当然,可以调整或关闭标签):
\documentclass{article}
\usepackage{pgfplots} % Loads all required packages automatically
\pgfkeys{/pgf/number format/relative round mode=fixed}
\usepackage{filecontents}
\begin{filecontents*}{contours.txt}
0 0 0
1 1 0
2 2 0
3 1 0
4 0 0
0 1 1
1 3 1
2 5 1
3 3 1
4 1 1
0 2 2
1 5 2
2 7 2
3 5 2
4 2 2
\end{filecontents*}
\begin{document}
\begin{figure}
\begin{tikzpicture}
\newcommand{\filename}{file}
\begin{axis}
\addplot [contour prepared] table {contours.txt};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}