我正在使用 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
。如何做到这一点?