我绘制了一些多项式不同阶的曲线。代码和生成的图像看起来类似于以下内容:
\documentclass[convert]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}[
width= 0.8\textwidth,
height= 0.5\textwidth,
ymin=0,
ymax=40,
xmin=0.1,
xmax=10,
xlabel=frequency,
ylabel=damping,
grid=both,
major grid style={black!50}
]
\newcommand{\const}{0.25}
\addplot [domain=0.01:10, samples=1000,smooth]{10*ln(1+\const*(x+1)^(2))/ln(10)};
\addplot [domain=0.01:10, samples=1000,smooth]{10*ln(1+\const*(2*(x+1)^(2)-1)^2)/ln(10)};
\addplot [domain=0.01:10, samples=1000,smooth]{10*ln(1+\const*(4*(x+1)^(3)-3*(x+1))^2)/ln(10)};
\addplot [domain=0.01:10, samples=1000,smooth]{10*ln(1+\const*(8*(x+1)^(4)-8*(x+1)^2+1)^2)/ln(10)};
\end{semilogxaxis}
\end{tikzpicture}
\end{document}
有没有一种优雅的方法可以将标签放在曲线附近?我想象使用不同曲线的斜率,并相应地旋转节点的文本,但我真的不知道该怎么做。此外,标签应该有白色背景色,但这部分应该很容易……
可能的结果可能是如下标签:
答案1
node [pos=0.6, sloped, anchor=south] {<Text>};
您可以通过在线条末尾添加以下内容,将标签与绘图线平行放置\addplot
:
请注意,我将样本数量从 1000 减少到了 30。对于像这样平滑的函数,您不需要那么多采样点。
\documentclass[convert]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}[
width= 0.8\textwidth,
height= 0.5\textwidth,
ymin=0,
ymax=40,
xmin=0.1,
xmax=10,
xlabel=frequency,
ylabel=damping,
grid=both,
major grid style={black!50},
/tikz/plot label/.style={
fill=white,
sloped,
anchor=south,
inner sep=1pt,
font=\bfseries
},
samples=30,
domain=0.01:10
]
\newcommand{\const}{0.25}
\addplot [thick, smooth]{10*ln(1+\const*(x+1)^(2))/ln(10)} node [pos=0.65, plot label] {a};
\addplot [thick, smooth]{10*ln(1+\const*(2*(x+1)^(2)-1)^2)/ln(10)} node [pos=0.55, plot label] {b};
\addplot [thick, smooth]{10*ln(1+\const*(4*(x+1)^(3)-3*(x+1))^2)/ln(10)} node [pos=0.45, plot label] {c};
\addplot [thick, smooth]{10*ln(1+\const*(8*(x+1)^(4)-8*(x+1)^2+1)^2)/ln(10)} node [pos=0.38, plot label] {d};
\end{semilogxaxis}
\end{tikzpicture}
\end{document}