如何标记文件中数据的最大 y 坐标。pgfplots

如何标记文件中数据的最大 y 坐标。pgfplots

我只想标记y外部文件数据中的坐标的最大值。

我尝试使用 的功能calc,但是却无法获得它;我想知道我是否可以使用一个函数maximum

我见过类似的解决问题的方法,使用pst这里,和#1。我如何在我的代码中实现pgfplots

这是我的图表的代码,我正在使用pgfplotstikz包:

\begin{figure}[!hbp]
\begin{tikzpicture}
    \begin{axis}[
    xlabel={X},
    ylabel={Y},
    xmax=50,
    xmin=0,
    ymax=.5,
    ymin=-.5,
    width=15cm,
    height=5cm,
    ]
        \addplot[blue,smooth]table{sample.table};
    \end{axis}
\end{tikzpicture}
\caption{Caption}
\end{figure}

答案1

这里有一个选项;mark max样式mark min接收一个可选参数,允许使用最大值的坐标指定节点的位置(默认值是above最大值和below最小值):

\documentclass{article}
\usepackage{pgfplots}

\makeatletter
\pgfplotsset{
    compat=1.12,
    /tikz/max node/.style={
        anchor=south,
    },
    /tikz/min node/.style={
        anchor=north,
        name=minimum
    },
    mark min/.style={
        point meta rel=per plot,
        visualization depends on={x \as \xvalue},
        scatter/@pre marker code/.code={%
            \ifx\pgfplotspointmeta\pgfplots@metamin
                \def\markopts{}%
                \coordinate (minimum);
                \node[#1] {(\pgfmathprintnumber[fixed]{\xvalue},\pgfmathprintnumber[fixed]{\pgfplotspointmeta})};%
            \else
                \def\markopts{mark=none}
            \fi
            \expandafter\scope\expandafter[\markopts,every node near coord/.style=green]
        },%
        scatter/@post marker code/.code={%
            \endscope
        },
        scatter,
    },
    mark min/.default={below},
    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[#1] {(\pgfmathprintnumber[fixed]{\xvalue},\pgfmathprintnumber[fixed]{\pgfplotspointmeta})};%
        \else
            \def\markopts{mark=none}
        \fi
            \expandafter\scope\expandafter[\markopts]
        },%
        scatter/@post marker code/.code={%
            \endscope
        },
        scatter
    },
    mark max/.default={above},
}
\makeatother

\usepackage{filecontents}
\begin{filecontents*}{sample.table}
x y
1 0.2
10 0.1
20 0.4
30 -0.3
40 0.3
50 -0.2
\end{filecontents*}

\begin{document}

\begin{figure}
\begin{tikzpicture}
    \begin{axis}[
    xlabel={X},
    ylabel={Y},
    xmax=50,
    xmin=0,
    ymax=.5,
    ymin=-.5,
    width=15cm,
    height=5cm,
    ]
  \addplot[blue,smooth,mark max=right]table{sample.table};
  \end{axis}
\end{tikzpicture}
\caption{Caption}
\end{figure}

\end{document}

在此处输入图片描述

我使用了 Jake 代码的一个变体his answer如何使用 pgfplots 和 scatter 自动标记局部极值?

相关内容