我正在尝试使用 Tikz 绘制几个函数相交的图形。我目前有(只有基本的绘图格式和实际绘图):
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
xlabel=$x$,
y label style={anchor=north east, at={(axis description cs:0,1)}},
ylabel=$y$,
xmin=-1, xmax=15,
ymin=-5, ymax=30,
axis on top,
xticklabel style={fill=white},
]
\addplot [id=ghosttan, domain=0:15, samples=500, color=black, dashed] {tan(deg(x))};
\addplot [id=tan, domain=0:15, restrict y to domain=-50:50, samples=1000, color=red, line width=0.5pt]{tan(deg(x))};
\addplot [id=root, domain=0:15, samples=100]{sqrt((12/x)^2 - 1)};
\addplot [id=minx, domain=0:15, samples=2]{-1/2*x};
\node [anchor=north east] at (axis cs:0,0) {$0$};
\end{axis}
\end{tikzpicture}
\end{document}
输出为:
我遇到的问题应该很明显:白色标签背景用于防止图表与标签交叉/干扰,但背景太清晰,尤其是在 6、8 和 14 附近。MWE 中的最后两个轴选项就是出于这个目的,它们的灵感来自此主题。
我的想法是让标签在标签和图形之间有一个稍大一些的白色副本。这样,在这个例子中,例如,当 4 碰到其对角线边缘并越过部分标签时,它才会清除图形。
理想情况下,我希望轴也保留在后面,但标签的优先级更高。不过,我不知道该如何管理,这就是我的疑问:我该如何管理?
答案1
您可以使用contour
包裹和图层选项(您必须将轴刻度标签放在顶部,否则您将失去轮廓的效果......:
\usepackage[outline]{contour}
\contourlength{1.2pt}
\pgfplotsset{
/pgfplots/layers/main on top/.define layer set={
axis background,axis grid, axis ticks,axis lines,
axis descriptions,axis foreground, main, axis tick labels,
}{/pgfplots/layers/standard},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
xlabel=$x$,
y label style={anchor=north east, at={(axis description cs:0,1)}},
ylabel=$y$,
xmin=-1, xmax=15,
ymin=-5, ymax=30,
xticklabel={\contour{white}{\pgfmathprintnumber{\tick}}},
set layers = main on top,
]
\addplot [id=ghosttan, domain=0:15, samples=500, color=black, dashed] {tan(deg(x))};
\addplot [id=tan, domain=0:15, restrict y to domain=-50:50, samples=1000, color=red, line width=0.5pt]{tan(deg(x))};
\addplot [id=root, domain=0:15, samples=100]{sqrt((12/x)^2 - 1)};
\addplot [id=minx, domain=0:15, samples=2]{-1/2*x};
\node [anchor=north east] at (axis cs:0,0) {$0$};
\end{axis}
\end{tikzpicture}
\end{document}