pgfplots: Como anotar um intervalo?

pgfplots: Como anotar um intervalo?

Para o MWE a seguir, gostaria de anotar um intervalo (por exemplo [2, 4]), conforme ilustrado na saída desejada.

Além disso, preciso saber estilizar as linhas verticais e a seta horizontal.

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
    xmin=0,xmax=5
    ]
        \addplot[mark=none,blue] {x^2};

    \end{axis}
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Responder1

Para o texto da anotação, você pode usar a decorations.text tikzbiblioteca.

Para estilizar, você pode adicionar quaisquer opções necessárias no \drawcomando, aqui está um exemplo:

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{decorations.text}    

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
    xmin=0,xmax=5
    ]
    \addplot[mark=none,blue] {x^2};
    \draw[red, dashed] (2, \pgfkeysvalueof{/pgfplots/ymin}) -- (2, \pgfkeysvalueof{/pgfplots/ymax});
    \draw[green, thick, dotted] (4, \pgfkeysvalueof{/pgfplots/ymin}) -- (4, \pgfkeysvalueof{/pgfplots/ymax});
    \draw[blue, very thick, {Stealth}-{Stealth}, postaction={decoration={raise=3pt, text along path, text={some text},text align=center}, decorate}] (2,5) -- (4,5);
    \end{axis}
    \end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Editar:

Conforme exigido pelo OP, criei o estilo \mylinepara as linhas verticais (e também \myarrowpara a seta do intervalo).

Além disso, exagerei com a tikzmania. Como Torbjørn T. apontou corretamente, usar a text along pathé um exagero para uma linha reta. Você pode simplesmente colocar um nó acima do caminho, sem a necessidade da decorations.textbiblioteca.

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usetikzlibrary{arrows.meta}
\tikzset{%
    myline/.style = {green, very thick, dashed},
    myarrow/.style = {blue, very thick, {Stealth}-{Stealth}},
}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
    xmin=0,xmax=5
    ]
    \addplot[mark=none,blue] {x^2};
    \draw[myline] (2, \pgfkeysvalueof{/pgfplots/ymin}) -- (2, \pgfkeysvalueof{/pgfplots/ymax});
    \draw[myline] (4, \pgfkeysvalueof{/pgfplots/ymin}) -- (4, \pgfkeysvalueof{/pgfplots/ymax});
    \draw[myarrow] (2,5) -- node[above] {some text} (4,5);
    \end{axis}
    \end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Segunda edição:

Criei um piccom três args: inicial x, final xe altura da seta y(este último poderia ser substituído por um valor fixo, se for sempre igual, modificando o picpara usar apenas dois args).

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usetikzlibrary{arrows.meta}
\tikzset{%
    myline/.style = {green, very thick, dashed},
    myarrow/.style = {blue, very thick, {Stealth}-{Stealth}},
    pics/myint/.style n args={3}{code={%  
            \draw[myline] (#1, \pgfkeysvalueof{/pgfplots/ymin}) -- (#1, \pgfkeysvalueof{/pgfplots/ymax});
            \draw[myline] (#2, \pgfkeysvalueof{/pgfplots/ymin}) -- (#2, \pgfkeysvalueof{/pgfplots/ymax});
            \draw[myarrow] (#1,#3) -- node[above] {some text} (#2,#3);
    }},
}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
    xmin=0,xmax=5
    ]
    \addplot[mark=none,blue] {x^2};
    \pic {myint={2}{4}{5}};
    \end{axis}
    \end{tikzpicture}
\end{document} 

Claro, com \pic {myint={2}{4}{5}};, a saída é igual à anterior.

informação relacionada