我正在尝试制作一个带有文字的螺旋线,就像
我努力了
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw [thick,->] (10, 0) -- (-10, 0) node [left] {Review};
\draw [thick,->] (0, -10) -- (0, 10) node [above] {Cumulative costs};
\draw [domain=0:-33, variable=\t, smooth, samples=75, ->] plot ({\t r}: {0.008*\t*\t});
\end{tikzpicture}
\end{document}
它会产生带注释的轴和螺旋,但我不知道如何沿着螺旋写文字。
答案1
我能看到两种可能性
在第一个解决方案中,我创建另一个图并使用库将节点放置在曲线上decorations.markings
。该库提供了两种指定位置的方法:按长度测量或按总长度的系数测量。
\documentclass[tikz,border=9]{standalone}
\usetikzlibrary{arrows.meta,decorations.markings}
\begin{document}
\tikzset{nodes={font=\ttfamily,fill=white}}
\begin{tikzpicture}
\draw[thick,arrows={->[length=10]}](8,0)--(-8,0)node [left] {Review};
\draw[thick,arrows={->[length=10]}](0,-8)--(0,8)node [above] {Cumulative costs};
\draw[domain=0:15,variable=\t,samples=440,smooth,arrows={->[length=10]}]
plot({(-\t+1.5708) r}:{\t/3+2*\t/(0.1+\t)});
\path[domain=0:15,variable=\t,samples=440,decorate,
decoration={
markings,
mark=at position 2cm with \node{2cm};,
mark=at position .3 with \node{pos=.3};,
}
]
plot({(-\t-1.5708) r}:{\t/3+2});
\end{tikzpicture}
另一种方法是创建一种新样式,通过我们定义的参数化将节点移动到我们想要的位置。
\begin{tikzpicture}[
declare function={
f(\t)=90-\t*90;
g(\t)=\t/2+2*\t/(0.1+\t);
f2(\t)=-90-\t*90;
g2(\t)=\t/2+2;
},
pos par/.style={
shift={({f2(#1)}:{g2(#1)})}
}
]
\draw[thick,arrows={->[length=10]}](8,0)--(-8,0)node[left]{Review};
\draw[thick,arrows={->[length=10]}](0,-8)--(0,8)node[above]{Cumulative costs};
\draw[domain=0:10,variable=\t,smooth,samples=440,arrows={->[length=10]}]
plot({f(\t)}:{g(\t)});
\path node[pos par=0]{pos par=0}
node[pos par=1]{pos par=1}
node[pos par=2]{pos par=2}
node[pos par=3]{pos par=3}
node[pos par=4]{pos par=4}
node[pos par=5]{pos par=5}
node[pos par=6]{pos par=6}
node[pos par=7]{pos par=7}
node[pos par=8]{pos par=8};
\end{tikzpicture}
\end{document}
顺便说一句,\t/(1+\t)
(以及它的线性变换)是一个“爬升”到 1 并停留在那里的函数。我添加这个函数是为了修饰阿基米德螺旋线,这样就有足够的空间放置第一个标签。