PGFPlots:如何在函数零点处绘制标签?

PGFPlots:如何在函数零点处绘制标签?

有没有一种简单的方法可以在函数的零点(即函数与 - 轴的交点)处构造一个节点(从而构造一个标签)x?我找到的示例有点太复杂了,根据 KISS 原则,我想知道是否有一种基本方法可以实现这一点。

编辑:更精确一点:我想获得任意函数零点处的刻度标签。零点应由程序计算(因此,如果这是自动化,则需要自动化)。

答案1

扩展@Peter Grill 的解决方案,以下是如何计算 x 坐标。

带有勾号

\documentclass[border=2pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{intersections}

\newlength{\len}
\newlength{\plotwidth}
\newcommand{\getvalue}[1]{\pgfkeysvalueof{/pgfplots/#1}}

%output will be given by \pgfmathresult
\newcommand{\xcoord}[1]% #1 = node name
{\pgfplotsextra{%
  \pgfextractx{\len}{\pgfpointdiff{\pgfplotspointaxisxy{0}{0}}{\pgfpointanchor{#1}{center}}}%
  \pgfextractx{\plotwidth}{\pgfpointdiff{\pgfplotspointaxisxy{\getvalue{xmin}}{0}}%
  {\pgfplotspointaxisxy{\getvalue{xmax}}{0}}}%
  \pgfmathparse{\len*(\getvalue{xmax}-\getvalue{xmin})/\plotwidth}%
}}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
            axis x line=middle,
            axis y line=middle,
            domain=-4:7,
            xmax=7,
        ]
        \addplot[no marks,blue,thick, name path global=My Graph] {x*x-4*x-7};
        \addplot[no marks,draw=none, name path global=x Axis] {0};
        \path[name intersections={of=My Graph and x Axis,total=\t}];

        \draw[very thin,color=gray] (intersection-1) -- +(0,-5mm) coordinate(tick1);
        \xcoord{intersection-1}%
        \node[below] at (tick1) {\pgfmathresult};

        \draw[very thin,color=gray] (intersection-2) -- +(0,-5mm) coordinate(tick2);
        \xcoord{intersection-2}%
        \node[below] at (tick2) {\pgfmathresult};
    \end{axis}
\end{tikzpicture}
\end{document}

答案2

下面是如何使用该库自动计算函数零点的示例intersections

在此处输入图片描述

笔记:

代码

\documentclass[border=2pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{intersections}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
            axis x line=middle,
            axis y line=middle,
            domain=-4:7,
            xmax=7,
        ]
        \addplot[no marks,blue,thick, name path global=My Graph] {x*x-4*x-7};
        \addplot[no marks,draw=none, name path global=x Axis] {0};
        \fill[red,name intersections={of=My Graph and x Axis,total=\t}]
            \foreach \s in {1,...,\t}{
                (intersection-\s) circle (2pt) 
            };
    \end{axis}
\end{tikzpicture}
\end{document}

答案3

仅用于使用 PSTricks 进行打字练习。

\documentclass[pstricks,border=12pt,nomessages]{standalone}
\usepackage{pst-eucl,pst-plot,fp}

\psset{yunit=.5}
\def\f(#1){((#1)^2-4*(#1)-7)}
\begin{document}
\begin{pspicture}[algebraic](-3,-12)(7.5,7.5)
    \psaxes[Dy=2,Dx=2]{->}(0,0)(-3,-12)(7,7)[$x$,0][$y$,90] 
    \psplot[linecolor=blue,linewidth=1pt]{-2}{6}{\f(x)}
        \FPqsolve{\xa}{\xb}{1}{-4}{-7}
        \FPeval\xa{round(xa:2)}\FPeval\xb{round(xb:2)}
    \pstInterFF[PointNameSep=17pt,PosAngle=30,PointName=\xa]{\f(x)}{0}{-2}{A}
    \pstInterFF[PointNameSep=17pt,PosAngle=150,PointName=\xb]{\f(x)}{0}{5}{B}
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容