Tikz pgfplots:每当标签相交时,标签自定义图形就会清除

Tikz pgfplots:每当标签相交时,标签自定义图形就会清除

我正在尝试使用 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}

输出为:

Tikz pgfplot 标签背景清除了太多的图表

我遇到的问题应该很明显:白色标签背景用于防止图表与标签交叉/干扰,但背景太清晰,尤其是在 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}

在此处输入图片描述

相关内容