pgfplots:在轴定义后绘制额外的刻度

pgfplots:在轴定义后绘制额外的刻度

考虑以下 MWE,其中绘制了一个示例正弦函数:

\documentclass[border=2mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
\begin{axis}[width=\textwidth,
             xmin=-0.1, xmax=10.5,
             ymin=-1.9, ymax=1.9,
             axis lines=middle,
             x axis line style={name path=xaxis}]

    \addplot[name path global=plot1,domain=0:10, samples=101]{sin(deg(x))};

\path [draw,name intersections={of={plot1 and xaxis}}]
  (intersection-1) node (A) {}
  (intersection-2) node (B) {}
  (intersection-3) node (C) {}
  (intersection-4) node (D) {};

\end{axis}
\end{tikzpicture}

\end{document}

它确定了绘图与 x 轴的交点,我无法在定义轴之前运行它。是否可以在这些交点上定义 x 轴上的额外刻度?如果可以,怎么做?


编辑:当然,这个问题与不太知名的函数有关,这些函数的零点无法通过分析确定和/或未知先验

答案1

这是一个在循环中添加刻度的提案。它通过以轴单位为 1 的距离对交叉点进行归一化来计算交叉点的 x 坐标。

\documentclass[border=2mm,tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{calc,intersections}
\pgfplotsset{compat=1.16}
\begin{document}

\begin{tikzpicture}
\begin{axis}[width=\textwidth,
             xmin=-0.1, xmax=10.5,
             ymin=-1.9, ymax=1.9,
             axis lines=middle,
             x axis line style={name path=xaxis},
             clip mode=individual]

    \addplot[name path global=plot1,domain=0:10, samples=101]{sin(deg(x))};

\path [draw,name intersections={of={plot1 and xaxis},total=\t}]
 let \p0=($(1,0)-(0,0)$) in
 foreach \X in {1,...,\t}
 {let  \p1=($(intersection-\X)-(0,0)$) in 
 ([yshift=2pt]intersection-\X) edge ([yshift=-2pt]intersection-\X) 
  node[above]{$\pgfmathparse{\x1/\x0}\pgfmathprintnumber\pgfmathresult$} };
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

显然,如果您对该函数有所了解,则可以通过在 pi 上对刻度进行标准化来漂亮地打印刻度。

\documentclass[border=2mm,tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{calc,intersections}
\pgfplotsset{compat=1.16}
\begin{document}

\begin{tikzpicture}
\begin{axis}[width=\textwidth,
             xmin=-0.1, xmax=10.5,
             ymin=-1.9, ymax=1.9,
             axis lines=middle,
             x axis line style={name path=xaxis},
             clip mode=individual]

    \addplot[name path global=plot1,domain=0:10, samples=101]{sin(deg(x))};

\path [draw,name intersections={of={plot1 and xaxis},total=\t}]
 let \p0=($(1,0)-(0,0)$) in
 foreach \X in {1,...,\t}
 {let  \p1=($(intersection-\X)-(0,0)$) in 
 ([yshift=2pt]intersection-\X) edge ([yshift=-2pt]intersection-\X) 
  node[above]{$\pgfmathparse{\x1/\x0/pi}\ifdim\pgfmathresult pt<0.1pt
  0
  \else
   \ifdim\pgfmathresult pt<1.1pt
    \pi
   \else
    \pgfmathprintnumber\pgfmathresult\pi
   \fi  
  \fi$} };
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容