Llene el área con un mínimo de dos funciones usando tikz y pgfplots

Llene el área con un mínimo de dos funciones usando tikz y pgfplots

Estoy cargando dos curvas desde un archivo y las trazo. \addplot table [...] {the table.txt};He logrado llenar el área debajo de una sola curva, pero quiero llenar el mínimo de las dos curvas. ¿Cuál es la forma preferida de lograr esto usando tikz y pgfplots? La imagen muestra un ejemplo del resultado deseado.

Gracias por cualquier ayuda.

ingrese la descripción de la imagen aquí

Respuesta1

Esto lo puede hacer la fillbetweenbiblioteca que se envía con pgfplotsla versión 1.10:

ingrese la descripción de la imagen aquí

\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{compat=1.9}

% \usetikzlibrary{}
\usepgfplotslibrary{fillbetween}


\begin{document}

\begin{tikzpicture}
    \begin{axis}[axis on top,set layers]
    \addplot[blue,name path=A,domain=0:2.3] {sin(deg(2*x))};    

    \addplot[red,name path=B,domain=0:2.3] {cos(deg(2*x))};

    \pgfonlayer{pre main}
    \fill[blue!20!white,intersection segments={of=A and B,sequence={A0 -- B1 -- A2}}]
        -- (axis cs:2.3,\pgfkeysvalueof{/pgfplots/ymin})
        -- (axis cs:0,\pgfkeysvalueof{/pgfplots/ymin})
        -- cycle
    ;
    \endpgfonlayer
    \end{axis}
\end{tikzpicture}
\end{document}

La idea es utilizar las nuevas intersection segmentsinstrucciones de ruta proporcionadas por fillbetween. Acepta rutas etiquetadas en la entrada y una sequencede segmentos de intersección. Actualmente, el "mínimo" debe proporcionarse manualmente. En su caso, necesita usar el primer (0º) segmento de la primera (A) curva ( A0), luego el segundo (1º) de la segunda curva (B), que es B1, seguido del tercer (2º) segmento de la primera curva que es A2. Las otras declaraciones especifican la línea inferior de la región llena. Las instrucciones de capas set layersy \pgfonlayerasegúrese de que el material aparezca detrás de las rutas de entrada etiquetadas.

Tenga en cuenta que la versión 1.10 es muy reciente en el momento de escribir este artículo; es posible que necesite una actualización de software.

Respuesta2

Otra alternativa es el uso del clipdoble, sin fillbetweenbiblioteca. Primero, llene el área debajo de la curva sinusoidal y luego limpie el área arriba de la curva coseno.

ingrese la descripción de la imagen aquí

Código:

\documentclass{article}
\usepackage[papersize={11cm,10cm}]{geometry}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\thispagestyle{empty}

\begin{document}

\begin{tikzpicture} 
\begin{axis}[enlargelimits=0.1]
\begin{scope}
\clip(axis cs:0,-1.19) -- (axis cs:2.3,-1.19) -- (axis cs:2.3,1)-- (axis cs:0,1)--  cycle;
\addplot[draw=white,fill=blue!20!white,domain=0:2.3] {sin(deg(2*x))}--(axis cs:2.3,-1.5) --(axis cs:0,-1.5);    
\end{scope}

\begin{scope}
\clip (axis cs:2.3,-1) -- (axis cs:2.3,1) -- (axis cs:0,1)-- (axis cs:0,-1)--cycle;
\addplot[draw=white,fill=white,domain=0:2.3] {cos(deg(2*x))}--(axis cs:2.3,1)--(axis cs:0,1);
\end{scope}
\addplot[red,domain=0:2.3] {cos(deg(2*x))};
\addplot[blue,domain=0:2.3] {sin(deg(2*x))};
\end{axis}
\end{tikzpicture}  
\end{document}

Respuesta3

Solo por finalizar la pregunta con PSTricks.

Representación de sufijo

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot,pst-eucl}

\def\f{x RadtoDeg sin 2 mul 3 add}
\def\g{x RadtoDeg cos 2 mul 3 add}

\begin{document}
\begin{pspicture}[saveNodeCoors,PointName=none,PointSymbol=none](-1,-1)(7,6)
    \pstInterFF{\f}{\g}{1}{A}
    \pstInterFF{\f}{\g}{4}{B}
    \pscustom[linestyle=none,fillstyle=solid,fillcolor=lightgray]
    {
        \psplot{.5}{N-A.x}{\f}
        \psplot{N-A.x}{N-B.x}{\g}
        \psplot{N-B.x}{6}{\f}
        \psline(6,0)(.5,0)
        \closepath
    }
    \psaxes[ticks=none,labels=none]{->}(0,0)(-1,-1)(6.5,5.5)[$x$,0][$y$,90]
    \psplot[linecolor=blue]{0}{TwoPi}{\f}
    \psplot[linecolor=red]{0}{TwoPi}{\g}
\end{pspicture}
\end{document}

ingrese la descripción de la imagen aquí

Representación infija

Si prefiere trabajar en infijo, utilice lo siguiente.

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot,pst-eucl}

\def\f{(2*sin(x)+3)}
\def\g{(2*cos(x)+3)}

\pstVerb{/I2P {AlgParser cvx exec} def}

\begin{document}
\begin{pspicture}[algebraic,saveNodeCoors,PointName=none,PointSymbol=none](-1,-1)(7,6)
    \pstInterFF{\f I2P}{\g I2P}{1}{A}
    \pstInterFF{\f I2P}{\g I2P}{4}{B}
    \pscustom[linestyle=none,fillstyle=solid,fillcolor=lightgray]
    {
        \psplot{.5}{N-A.x}{\f}
        \psplot{N-A.x}{N-B.x}{\g}
        \psplot{N-B.x}{6}{\f}
        \psline(6,0)(.5,0)
        \closepath
    }
    \psaxes[ticks=none,labels=none]{->}(0,0)(-1,-1)(6.5,5.5)[$x$,0][$y$,90]
    \psplot[linecolor=blue]{0}{TwoPi}{\f}
    \psplot[linecolor=red]{0}{TwoPi}{\g}
\end{pspicture}
\end{document}

información relacionada