pgfplots 和坐标的问题

pgfplots 和坐标的问题

我正在使用 Jake 的代码his answer如何使用 pgfplots 和 scatter 自动标记局部极值?。使用mark max样式我可以使用 检索函数最大值的 y 坐标值\pgfplots@metamax

有了这个值,我就可以使用它来使用axis cs坐标系添加节点,如下面的代码所示;但是,我不能将这些节点用作新节点的坐标\addplot(取消注释注释掉的行\addplot,你会收到错误)。

我如何才能使用这些命名节点\addplot

代码:

\documentclass[border=3pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{arrows.meta}

\makeatletter
\pgfplotsset{
    /tikz/max node/.style={
        anchor=south,
    },
    mark max/.style={
        point meta rel=per plot,
        visualization depends on={x \as \xvalue},
        scatter/@pre marker code/.code={%
        \ifx\pgfplotspointmeta\pgfplots@metamax
            \def\markopts{}%
            \coordinate (maximum);
            \node [max node] {
                \pgfmathprintnumber[fixed]{\xvalue},%
                \pgfmathprintnumber[fixed]{\pgfplotspointmeta}
            };
        \else
            \def\markopts{mark=none}
        \fi
            \expandafter\scope\expandafter[\markopts]
        },%
        scatter/@post marker code/.code={%
            \endscope
        },
        scatter
    }
}
\makeatother

\pgfmathdeclarefunction{cubic}{1}{%
  \pgfmathparse{-2*(#1+2)*(#1+2)*(#1-2)+40}%
}

\begin{document}        

\begin{tikzpicture}
\begin{axis}[
  axis lines=middle,
  xtick={-2.5,2.5},
  ytick={\empty},
  domain=-2.5:2.5,
  ymin=-1,
  xmin=-4,
  xmax=3,
  clip=false,
] 
% The curve
\addplot [mark max,draw=red,name path=A] plot {cubic(x)};
\makeatletter
\node (A) at (axis cs:-2.5,\pgfplots@metamax) {A};
\node (B) at (axis cs:2.5,\pgfplots@metamax) {B};
%\addplot[name path=B] coordinates {(A) (B)};% doesn't work
\makeatother
\end{axis}
\end{tikzpicture}

\end{document}

也许我在这里使用了错误的方法。我想要做的是:

A我有一个使用 绘制的函数图\addplot;此路径使用 命名name path=A。我需要添加另一个\addplot(将命名为B)由两个点定义,这两个点的 x 坐标已知,但 y 坐标是计算出来的,在 y 坐标上添加正或负偏移,以获得 的最大值A。然后我将使用该fillbetween库填充A和之间的区域B。如何做到这一点?

相关内容