有没有一种简单的方法可以在函数的零点(即函数与 - 轴的交点)处构造一个节点(从而构造一个标签)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
:
笔记:
- 我不知道如何提取
x
交点的值。解决方案来自提取 TikZ 中任意点的 x,y 坐标可以提取坐标,但需要将其转换为axis cs
值。
代码
\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}