当我更改域的值时,交叉点坐标也会发生变化

当我更改域的值时,交叉点坐标也会发生变化

我正在尝试使用 Tikz/Pgfplots 绘制一个函数。我对使用 Tikz/Pgfplots 还不熟悉。我使用各种来源创建了代码。以下是 MWE:

\documentclass{standalone} 
\usepackage{pgfplots,tikz} 
\usetikzlibrary{intersections}

\begin{document} 

  \begin{tikzpicture}[
    font=\scriptsize
    ]
    \begin{axis}[
      xmin=0, xmax=525,
      ymin=-2.25, ymax=1.75,
      xtick={0,25,...,500},
      ytick={-2,-1.5,...,1.5},
      axis lines=middle,
      ymajorgrids,
      tick label style={font=\tiny},
      xlabel near ticks,
      ylabel near ticks,
      label style={font=\scriptsize},
      y axis line style={stealth-stealth},
      xticklabel=\pgfmathprintnumber{\tick}\%,
      xticklabel style={rotate=90},
      x axis line style={name path=xaxis},
      ]
      \addplot[name path=s,blue,very thick,domain=0:300] {-1.6 + 10/(1+\x/100)^1 - 10/(1+\x/100)^2};
    
      \fill[red,name intersections={of=s and xaxis,name=i},] (i-1) circle (2pt);
    
      \draw[font=\tiny,name intersections={of=s and xaxis},] node[pin={right:\pgfplotspointgetcoordinates{(i-1)} (\pgfmathprintnumber[fixed]{ \pgfkeysvalueof{/data point/x}}\%, \pgfmathprintnumber[fixed]{ \pgfkeysvalueof{/data point/y}})}] at (i-1){};
    \end{axis}
  \end{tikzpicture}
\end{document}

这将生成以下图表: 正确的交叉点坐标

交点的坐标是正确的 (25%,0)。但是,当我将域更改为 时domain=0:500,交点的坐标变为 (26.39%,0),这是错误的。以下是域更改后的图:

错误的交叉点坐标

你知道为什么会发生这种情况吗?提前谢谢您。

答案1

xaxis在您的示例中,似乎s在任何采样点都没有相同的值,因此交点实际上发生在采样点之间的某个地方。

\pgfmathprintnumber[fixed]{...}要看到这一点,只需从打印交叉点坐标中删除选项。

当然,如果你按照@mickep 在其评论中的建议增加样本数量(从默认值开始),不同域大小的坐标之间的差异就会变小。例如,在 ˙samples=101` 时,差异几乎可以忽略不计:

在此处输入图片描述

在此处输入图片描述

MWE 对此进行了稍微修改/缩短的代码演示,如下所示:

\documentclass[margin=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{intersections}

\begin{document}

  \begin{tikzpicture}[
C/.style = {circle, draw=none, fill=red, inner sep=2pt, node contents={},
            pin=above right:{\pgfplotspointgetcoordinates{(#1)} %
    (\pgfkeysvalueof{/data point/x}\%,
     \pgfkeysvalueof{/data point/y})
                            }
            }
                        ]
\begin{axis}[
    axis lines=middle,
    y axis line style={stealth-stealth},
    x axis line style={name path=xaxis},
    ymajorgrids,
%
    xmin=0,     xmax=525,
    ymin=-1.75, ymax=1.75,
    xtick={0,25,...,500},
    ytick={-1.5,...,1.5},
    ticklabel style={font=\tiny},
    xticklabel=\pgfmathprintnumber{\tick}\%,
    xticklabel style={rotate=90},
%
    no marks,
    domain=0:300,
    %  domain=0:500,
    samples=101     % <---
      ]
\addplot +[name path=s,
           very thick]  {-1.6 + 10/(1+\x/100)^1 - 10/(1+\x/100)^2};

\fill[red,name intersections={of=s and xaxis,name=i}] (i-1)  node[C={i-1}];
    \end{axis}
  \end{tikzpicture}
\end{document}

相关内容