当我\path plot function {x^2};
在 tikz 中使用时,它会从左到右绘制(默认域是-5:5
)。这很烦人,因为例如,人们无法堆积-- plot function {x^2 + 1} -- cycle;
然后填满整个东西;它不会填充明显的循环,而是填充在对角之间自相交的循环,因为它“返回车厢”,可以这么说。
有没有办法plot function
以相反的顺序生成点?或者,有没有办法让 tikz 以与指定点相反的顺序绘制路径?(最后一个方法更通用,因为路径的方向使用得很多。)
答案1
如果您使用 PGFplots 绘制函数,则路径将被反转并通过在选项stack plots=y
中使用axis
并\closedcycle
在第二个绘图后发出进行适当连接:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
stack plots=y,
hide axis
]
\addplot [draw=orange,thick]{x^2};
\addplot [draw=orange, thick, fill=yellow] {1} \closedcycle;
\end{axis}
\end{tikzpicture}
\end{document}
如果您想要的只是填充的路径,则可以使用禁用轴hide axis
。
答案2
对于当前的 plot 函数实现,我认为这是不可能的,因为 pgf 按顺序读取 gnuplot 输出的文件。由于 gnuplot 从 x 的最低值到最高值计算函数值,因此不可能按相反顺序计算(请参阅文件 pgfmoduleplot.code.tex)(我可能错过了执行此操作的 gnuplot 选项)。
但是,您可以使用 pgf 数学引擎实现您想要的结果,如下所示,反转域的边界。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=.25]
\fill plot (\x,\x^2) -- plot[domain=5:-5] (\x,\x^2 + 1) -- cycle;
\end{tikzpicture}
\end{document}
注意:这是我第一次向 tex.se 做出贡献。希望格式正确。
答案3
实际上,您可以强制 Gnuplot 按照您想要的顺序计算路径。这个想法是使用 Gnuplot 的参数曲线表示。
在以下示例中(在 %% 好部分,%% 坏部分只是为了展示如果不使用技巧会发生什么),我正常绘制第一条曲线,使用技巧绘制第二条曲线。使用重心公式将参数 t 的每个值(介于 0 和 1 之间)发送到所需的区间(此处按顺序为 [2,-1]):x = (1-t) *2 + t *(-1)
更一般地,如果您想将 [0,1] 发送到 [a,b](从 b 开始),则只需使用 (1-t)*b + t*a。
\documentclass{article}
\usepackage{tikz}
\begin{document}
%% Requires Gnuplot !
%% Functions definition
\newcommand{\funcf}[1]{(#1)**2)} % it is wise to always put the #1 argument between ()
\newcommand{\funcg}[1]{1+(#1)**2)}
%% Bad
\begin{tikzpicture}
\fill
plot[domain=-1:2, id=funcf] function {\funcf{x}}
--
plot[domain=2:-1, id=funcgbad] function {\funcg{x}} % inverting boundaries does *NOT* work with Gnuplot
-- cycle;
\end{tikzpicture}
%% Good
\begin{tikzpicture}
\fill
plot[domain=-1:2, id=funcf] function {\funcf{x}}
--
plot[domain=0:1, parametric, id=funcggood] function {(1-t)*2+t*(-1),\funcg{(1-t)*2+t*(-1)}}
-- cycle;
\end{tikzpicture}
\end{document}