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

다음은 루프에 틱을 추가하는 제안입니다. 교차점의 x 좌표를 축 단위로 거리 1로 정규화하여 계산합니다.

\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}

여기에 이미지 설명을 입력하세요

관련 정보