我对以下 tikz 代码有疑问(也许,在阅读本文时,首先跳过代码并阅读最后的问题),它会创建蛛网图:
\documentclass{article}
\usepackage{tikz, fullpage}
\usetikzlibrary{arrows}
\begin{document}
\thispagestyle{empty}
\begin{figure}[htbp]
\centering
\newcounter{j}
\pgfmathdeclarefunction{p}{1}{
\pgfmathparse{#1 > 0.5 ? 1 : ( #1 >0.25 ? 0.2 : 2* #1 )} %change
}
\begin{tikzpicture}[>=latex',scale=10]
\draw[color=blue,style=thick,domain=0:1] plot (\x,{p(\x)}); %change
\draw[color=green](0,0)--(1,1); %change
\draw[->](0,0)--(0,1) node[above]{$y$};
\draw[->](0,0)--(1,0) node[right]{$x$};
\newcounter{cnt}
\newcommand{\x}{.3} %change
\foreach \i in {1,...,4}{
\pgfmathparse{(p(\x)}
\let\y\pgfmathresult
\draw[color=magenta](\x,\x)--(\x,\y)--(\y,\y);
\draw[color=orange,dotted,line width=0.8pt]
(\x,\x)--(\x,0) node[below=8pt]{$u_\i$};
\pgfmathsetcounter{j}{\i+1}
\draw[color=blue,dotted,line width=0.8pt]
(\x,\y)--(0,\y) node[left=8pt] {$u_\thej$};
\global\let\x\y}
\end{tikzpicture}
\caption{description} %change
\end{figure}
\pgfmathdeclarefunction{p}{1}{
\pgfmathparse{(and(#1>0, #1<1))}
}
\end{document}
我刚才问过这问题,关于如何创建这样的图表,我得到了一些非常好的答案,我接受了其中一个使用 tikz 来做到这一点。现在的问题是:如果我编译代码分段图表,接受的答案看起来不错(就像接受的答案中相应代码的图形一样)。但如果我稍微更改该代码(我在进行更改的行中写入 %change;请注意,我对 tikz 几乎一无所知,所以我只是在各个地方更改了该代码,观察了它的作用,从而将该代码塑造成现在的代码以满足我的需求),输出看起来很糟糕/很糟糕:
我认为最明智的改变是,我正在改变我的分段函数(因为所有其他的改变只涉及改变图的域、“蜘蛛网”的迭代次数和迭代开始的域点)从
\pgfmathdeclarefunction{p}{1}{%
\pgfmathparse{#1>0.5 ? 1 : 2*#1 }%
}
到
\pgfmathdeclarefunction{p}{1}{
\pgfmathparse{#1 > 0.5 ? 1 : ( #1 >0.25 ? 0.2 : 2* #1 )}
}
由于原始代码的所有其他更改来自这里与原始分段函数一起工作。
我定义的分段函数在上面的图中看起来仍然没问题(这意味着函数的定义与其图相对应),但问题是洋红色与橙色和蓝色投影一起迭代,它们以某种方式偏移 - 并且图本身不再居中。请帮我问题:我怎样才能使迭代/情节再次看起来正常?
(有趣的是,如果我编译文档,得到的是 *.ps 格式而不是 *.pdf 格式(我使用的是 texmaker -> 上述输出是使用“pdflatex”然后“view pdf”编译的),迭代不再偏移,并且图居中,但是所有的投影突然都向右偏移了很多)
答案1
您的问题来自 的定义p
。您忘记了括号后的 %,我认为它是
#1 < 0.25
而不是#1 > 0.25
但也许您可以给出数学定义。如果您采用下一个定义,您将得到相同的图表。
\pgfmathdeclarefunction{p}{1}{%
\pgfmathparse{#1 > 0.5 ? 1 : ( #1 < 0.25 ? 0.2 : 2* #1 )} %change
}
也许一个解决方案
\documentclass{article}
\usepackage{tikz, fullpage}
\usetikzlibrary{arrows}
\begin{document}
\thispagestyle{empty}
\newcounter{j}
\begin{tikzpicture}[>=latex',scale=10,%
declare function={%
p(\t)= greater(\t,0.5) ? 1 : ( less(\t,0.25) ? 0.2 : 2* \t );}]
\draw[color=blue,style=thick,domain=0:1] plot (\x,{p(\x)}); %change
\draw[color=green](0,0)--(1,1); %change
\draw[->](0,0)--(0,1) node[above]{$y$};
\draw[->](0,0)--(1,0) node[right]{$x$};
\newcounter{cnt}
\newcommand{\x}{.3} %change
\foreach \i in {1,...,2}{
\pgfmathparse{(p(\x)}
\let\y\pgfmathresult
\draw[color=magenta](\x,\x)--(\x,\y)--(\y,\y);
\draw[color=orange,dotted,line width=0.8pt]
(\x,\x)--(\x,0) node[below=8pt]{$u_\i$};
\pgfmathsetcounter{j}{\i+1}
\draw[color=blue,dotted,line width=0.8pt]
(\x,\y)--(0,\y) node[left=8pt] {$u_\thej$};
\global\let\x\y}
\end{tikzpicture}
\end{document}