Overleaf에서 Tikz를 사용하여 함수를 자세히 플로팅

Overleaf에서 Tikz를 사용하여 함수를 자세히 플로팅

다음 코드를 사용하여 3개의 그래픽을 만들었습니다.

\documentclass[12pt]{exam}
\usepackage[a4paper, left=2.00cm, right=2.00cm, top=2.00cm, bottom=3.00cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
\usepackage{setspace}
\usepackage[x11names]{xcolor}
\usepackage{tcolorbox}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage[colorlinks=false]{hyperref}
\usepackage{tocloft}
\usepackage{ragged2e}
\usepackage{mathtools}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{babel}

\begin{document}

\begin{tikzpicture}
    \draw[->] (-0.3, 0) -- (3.3, 0) node[right] {$\mathbb{R}$};
    \draw[->] (0, -0.3) -- (0, 2.5) node[above] {$\mathbb{R}$};
    \draw[thick, domain=0.5:2.8, smooth, variable=\x, blue] plot ({\x}, {sin(2*\x r) + 1.2});
    \path[-, dashed, color = Green4] (0.5, 0) edge (0.5, 2) node[anchor=north] {$\alpha$};
    \path[-, dashed, color = Green4] (2.8, 0) edge (2.8, 0.5) node[anchor=north] {$\beta$};
    \path[-, dashed, color = red] (0.5, 2.05) edge (2.8, 2.05) node[anchor=north] {};
    \path[-, dashed, color = red] (2.8, 2.05) edge (2.8, 0.55) node[anchor=north] {};
    \shade[ball color = red] (0.5, 2.05) circle (2pt);
    \fill[OrangeRed1, opacity = 0.15] (0.5, 0) rectangle (2.8, 2.05);
\end{tikzpicture}
\begin{tikzpicture}
    \draw[->] (-0.3, 0) -- (3.3, 0) node[right] {$\mathbb{R}$};
    \draw[->] (0, -0.3) -- (0, 2.5) node[above] {$\mathbb{R}$};
    \draw[thick, domain=0.5:2.8, smooth, variable=\x, blue] plot ({\x}, {sin(2*\x r) + 1.2});
    \path[-, dashed, color = Green4] (0.5, 0) edge (0.5, 2) node[anchor=north] {$\alpha$};
    \path[-, dashed, color = Green4] (2.8, 0) edge (2.8, 0.5) node[anchor=north] {$\beta$};
    \path[-, dashed, color = red] (0.5, 0.55) edge (2.8, 0.55) node[anchor=north] {};
    \shade[ball color = red] (2.8, 0.55) circle (2pt);
    \fill[OrangeRed1, opacity = 0.15] (0.5, 0) rectangle (2.8, 0.55);
\end{tikzpicture}
\begin{tikzpicture}
    \draw[->] (-0.3, 0) -- (3.3, 0) node[right] {$\mathbb{R}$};
    \draw[->] (0, -0.3) -- (0, 2.5) node[above] {$\mathbb{R}$};
    \draw[thick, domain=0.5:2.8, smooth, variable=\x, blue] plot ({\x}, {sin(2*\x r) + 1.2});
    \path[-, dashed, color = Green4] (0.5, 0) edge (0.5, 2) node[anchor=north] {$\alpha$};
    \path[-, dashed, color = Green4] (2.8, 0) edge (2.8, 0.5) node[anchor=north] {$\beta$};
    \path[-, dashed, color = Green4] (1.65, 0) edge (1.65, 1.05) node[anchor=north] {$\frac{\alpha+\beta}{2}$};
    \path[-, dashed, color = red] (0.5, 1.05) edge (2.8, 1.05) node[anchor=north] {};
    \path[-, dashed, color = red] (2.8, 1.05) edge (2.8, 0.55) node[anchor=north] {};
    \shade[ball color = red] (1.65, 1.05) circle (2pt);
    \fill[OrangeRed1, opacity = 0.15] (0.5, 0) rectangle (2.8, 1.05);
\end{tikzpicture}

\end{document}

여기에 이미지 설명을 입력하세요 그러나 이 예와 같이 세 개의 그래픽을 수직으로 정렬하고 그 아래에 일부 텍스트를 추가하고 싶습니다. 여기에 이미지 설명을 입력하세요

내가 어떻게 해? 미리 감사드립니다

답변1

TikZ 그림의 기준선을 지정하여 플롯의 x축을 정렬할 수 있습니다. 이렇게 하면 크기가 다르고 가로좌표가 자동으로 정렬되는지 걱정할 필요가 없습니다(하위 그림에 대한 일반적인 패키지에서 수행하는 것처럼 아래쪽 정렬만 하는 경우에는 그렇지 않습니다).

\documentclass[12pt]{exam}
\usepackage[a4paper, left=2.00cm, right=2.00cm, top=2.00cm, bottom=3.00cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
\usepackage{setspace}
\usepackage[x11names]{xcolor}
\usepackage{tcolorbox}
\usepackage{amssymb}
\usepackage{tocloft}
\usepackage{ragged2e}
\usepackage{mathtools}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{babel}
\usepackage{subcaption}
\usepackage[colorlinks=false]{hyperref}

\tikzset{mynode/.style={anchor=center,yshift=-2ex}}

\begin{document}
\begin{figure}[htbp]
\hfill\begin{tikzpicture}[baseline={(0,0)}]
    \draw[->] (-0.3, 0) -- (3.3, 0) node[right] {$\mathbb{R}$};
    \draw[->] (0, -0.3) -- (0, 2.5) node[above] {$\mathbb{R}$};
    \draw[thick, domain=0.5:2.8, smooth, variable=\x, blue] plot ({\x}, {sin(2*\x r) + 1.2});
    \path[-, dashed, color = Green4] (0.5, 0) edge (0.5, 2) node[mynode] {$\alpha$};
    \path[-, dashed, color = Green4] (2.8, 0) edge (2.8, 0.5) node[mynode] {$\beta$};
    \path[-, dashed, color = red] (0.5, 2.05) edge (2.8, 2.05);
    \path[-, dashed, color = red] (2.8, 2.05) edge (2.8, 0.55);
    \shade[ball color = red] (0.5, 2.05) circle (2pt);
    \fill[OrangeRed1, opacity = 0.15] (0.5, 0) rectangle (2.8, 2.05);
\end{tikzpicture}%
\hfill\hfill
\begin{tikzpicture}[baseline={(0,0)}]
    \draw[->] (-0.3, 0) -- (3.3, 0) node[right] {$\mathbb{R}$};
    \draw[->] (0, -0.3) -- (0, 2.5) node[above] {$\mathbb{R}$};
    \draw[thick, domain=0.5:2.8, smooth, variable=\x, blue] plot ({\x}, {sin(2*\x r) + 1.2});
    \path[-, dashed, color = Green4] (0.5, 0) edge (0.5, 2) node[mynode] {$\alpha$};
    \path[-, dashed, color = Green4] (2.8, 0) edge (2.8, 0.5) node[mynode] {$\beta$};
    \path[-, dashed, color = red] (0.5, 0.55) edge (2.8, 0.55);
    \shade[ball color = red] (2.8, 0.55) circle (2pt);
    \fill[OrangeRed1, opacity = 0.15] (0.5, 0) rectangle (2.8, 0.55);
\end{tikzpicture}%
\hfill\hfill
\begin{tikzpicture}[baseline={(0,0)}]
    \draw[->] (-0.3, 0) -- (3.3, 0) node[right] {$\mathbb{R}$};
    \draw[->] (0, -0.3) -- (0, 2.5) node[above] {$\mathbb{R}$};
    \draw[thick, domain=0.5:2.8, smooth, variable=\x, blue] plot ({\x}, {sin(2*\x r) + 1.2});
    \path[-, dashed, color = Green4] (0.5, 0) edge (0.5, 2) node[mynode] {$\alpha$};
    \path[-, dashed, color = Green4] (2.8, 0) edge (2.8, 0.5) node[mynode] {$\beta$};
    \path[-, dashed, color = Green4] (1.65, 0) edge (1.65, 1.05) node[mynode] {$\frac{\alpha+\beta}{2}$};
    \path[-, dashed, color = red] (0.5, 1.05) edge (2.8, 1.05);
    \path[-, dashed, color = red] (2.8, 1.05) edge (2.8, 0.55);
    \shade[ball color = red] (1.65, 1.05) circle (2pt);
    \fill[OrangeRed1, opacity = 0.15] (0.5, 0) rectangle (2.8, 1.05);
\end{tikzpicture}\hfill\mbox{}%

\subcaptionbox{A cat}{\hspace{.33\linewidth}}%
\subcaptionbox{A cat}{\hspace{.33\linewidth}}%
\subcaptionbox{A cat}{\hspace{.33\linewidth}}%
\end{figure}

\end{document}

여기에 이미지 설명을 입력하세요

답변2

이게 어때?

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{tikz}
\usepackage[x11names]{xcolor}
\usepackage{amssymb}

\begin{document}

\begin{figure}[htbp]
  \centering
  \begin{subfigure}[b]{0.3\textwidth}
    \begin{tikzpicture}
        \draw[->] (-0.3, 0) -- (3.3, 0) node[right] {$\mathbb{R}$};
        \draw[->] (0, -0.3) -- (0, 2.5) node[above] {$\mathbb{R}$};
        \draw[thick, domain=0.5:2.8, smooth, variable=\x, blue] plot ({\x}, {sin(2*\x r) + 1.2});
        \path[-, dashed, color = Green4] (0.5, 0) edge (0.5, 2) node[anchor=north] {$\alpha$};
        \path[-, dashed, color = Green4] (2.8, 0) edge (2.8, 0.5) node[anchor=north] {$\beta$};
        \path[-, dashed, color = red] (0.5, 2.05) edge (2.8, 2.05) node[anchor=north] {};
        \path[-, dashed, color = red] (2.8, 2.05) edge (2.8, 0.55) node[anchor=north] {};
        \shade[ball color = red] (0.5, 2.05) circle (2pt);
        \fill[OrangeRed1, opacity = 0.15] (0.5, 0) rectangle (2.8, 2.05);
    \end{tikzpicture}
    \caption{Caption for the first graphic.}
    \label{fig:sub1}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.3\textwidth}
    \begin{tikzpicture}
        \draw[->] (-0.3, 0) -- (3.3, 0) node[right] {$\mathbb{R}$};
        \draw[->] (0, -0.3) -- (0, 2.5) node[above] {$\mathbb{R}$};
        \draw[thick, domain=0.5:2.8, smooth, variable=\x, blue] plot ({\x}, {sin(2*\x r) + 1.2});
        \path[-, dashed, color = Green4] (0.5, 0) edge (0.5, 2) node[anchor=north] {$\alpha$};
        \path[-, dashed, color = Green4] (2.8, 0) edge (2.8, 0.5) node[anchor=north] {$\beta$};
        \path[-, dashed, color = red] (0.5, 0.55) edge (2.8, 0.55) node[anchor=north] {};
        \shade[ball color = red] (2.8, 0.55) circle (2pt);
        \fill[OrangeRed1, opacity = 0.15] (0.5, 0) rectangle (2.8, 0.55);
    \end{tikzpicture}
    \caption{Caption for the second graphic.}
    \label{fig:sub2}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.3\textwidth}
    \begin{tikzpicture}
        \draw[->] (-0.3, 0) -- (3.3, 0) node[right] {$\mathbb{R}$};
        \draw[->] (0, -0.3) -- (0, 2.5) node[above] {$\mathbb{R}$};
        \draw[thick, domain=0.5:2.8, smooth, variable=\x, blue] plot ({\x}, {sin(2*\x r) + 1.2});
        \path[-, dashed, color = Green4] (0.5, 0) edge (0.5, 2) node[anchor=north] {$\alpha$};
        \path[-, dashed, color = Green4] (2.8, 0) edge (2.8, 0.5) node[anchor=north] {$\beta$};
        \path[-, dashed, color = Green4] (1.65, 0) edge (1.65, 1.05) node[anchor=north] {$\frac{\alpha+\beta}{2}$};
        \path[-, dashed, color = red] (0.5, 1.05) edge (2.8, 1.05) node[anchor=north] {};
        \path[-, dashed, color = red] (2.8, 1.05) edge (2.8, 0.55) node[anchor=north] {};
        \shade[ball color = red] (1.65, 1.05) circle (2pt);
        \fill[OrangeRed1, opacity = 0.15] (0.5, 0) rectangle (2.8, 1.05);
    \end{tikzpicture}
    \caption{Caption for the third graphic.}
    \label{fig:sub3}
  \end{subfigure}
  \caption{Main caption for the three graphics.}
  \label{fig:main}
\end{figure}

Some text below the graphics.

\end{document}

여기에 이미지 설명을 입력하세요

값을 변경하여 각 하위 그림의 너비를 사용자 정의할 수 있습니다 0.3\textwidth. 명령 은 \hfill하위 그림을 수평으로 배포합니다.

답변3

모든 이미지의 높이가 동일하도록 세로좌표를 다시 그립니다.

\documentclass{article}
\usepackage[font=small, 
            justification=raggedright]{subcaption}
\usepackage{tikz}
\usepackage[x11names]{xcolor}
\usepackage{nccmath,amssymb}

\begin{document}
    \begin{figure}[htbp]
    \centering
\tikzset{
    tl/.style = {anchor=center, yshift=-2.4ex},
    ln/.style = {draw, color=#1, densely dashed},
  Ball/.style = {ball color = red},
        }
\newcommand\axis{
    \draw[->] (-0.2,0) -- (3.2, 0) node[right] {$\mathbb{R}$};
    \draw[->] (0,-0.8) + (0,0.6) -- (0, 2.5) node[above] {$\mathbb{R}$};
                }
\pgfmathsetmacro{\ya}{sin(2*0.5 r) + 1.2}           % 2*0.5 +1.2
\pgfmathsetmacro{\yb}{sin(2*2.8 r) + 1.2}           % 2*2.8  + 1-2
\pgfmathsetmacro{\yc}{sin(2*(0.5+2.8)/2  r) + 1.2}  % 2*(0.5+2.8)/2 +1.2
%%%% images
\subfloat[Caption for the first graphic.    \label{subfig:a}]%
{% 
    \begin{tikzpicture}
\axis
\draw[thick, blue, domain=0.5:2.8, samples=100] plot (\x, {sin(2*\x r) + 1.2});

\path[ln=Green4](0.5, 0) edge ++ (0,\ya) node[tl] {$\alpha$}
                (2.8, 0) edge ++ (0,\yb) node[tl] {$\beta$};
\path[ln=red]   (0.5, \ya)  -|  (2.8, \yb);
\shade[Ball]    (0.5, \ya) circle[radius=2pt];
\fill[OrangeRed1, opacity = 0.15] (0.5,0) rectangle (2.8, \ya);
    \end{tikzpicture}%
}\hfill
\subfloat[Caption for the second graphic.    \label{subfig:b}]%
{% 
    \begin{tikzpicture}
\axis
\draw[thick, blue, domain=0.5:2.8, samples=100] plot (\x, {sin(2*\x r) + 1.2});

\path[ln=Green4](0.5, 0) edge ++ (0,\ya) node[tl] {$\alpha$}
                (2.8, 0) edge ++ (0,\yb) node[tl] {$\beta$};
\path[ln=red]   (0.5, \yb)  --  (2.8, \yb);
\shade[Ball]    (2.8, \yb) circle[radius=2pt];
\fill[OrangeRed1, opacity = 0.15] (0.5,0) rectangle (2.8, \yb);
    \end{tikzpicture}%
}\hfill
\subfloat[Caption for the second graphic.    \label{subfig:c}]%
{% 
    \begin{tikzpicture}
\axis
\draw[thick, blue, domain=0.5:2.8, samples=100] plot (\x, {sin(2*\x r) + 1.2});

\path[ln=Green4](0.5, 0) edge ++ (0,\ya) node[tl] {$\alpha$}
                (2.8, 0) edge ++ (0,\yb) node[tl] {$\beta$}
                (1.65,0) edge ++ (0,\yc) node[tl] {$\mfrac{\alpha+\beta}{2}$};
\path[ln=red]   (0.5, \yc)  -|  (2.8, \yb);
\shade[Ball]    (1.65,\yc) circle[radius=2pt];
\fill[OrangeRed1, opacity = 0.15] (0.5,0) rectangle (2.8, \yc);
    \end{tikzpicture}%
}
\caption{Main caption for the three graphics.}
\label{fig:main}
    \end{figure}
\end{document}

여기에 이미지 설명을 입력하세요

코멘트:
귀하의 솔루션과 다른 솔루션과 비교하여 위의 MWE에는 다음과 같은 주요 차이점이 있습니다.

  • 그리기 좌표계에 대해 정의된 명령(모든 이미지의 높이가 동일하도록)
  • 이미지 요소 스타일의 일반적인 정의
  • 이미지에 사용되는 y 좌표 계산을 위한 매크로를 거부했습니다.
  • 패키지 버전 3.1 이상 \subfloat에서 에뮬레이트된 환경을 사용합니다 .subcaption

관련 정보