하위 캡션이 포함된 Tikzpicture

하위 캡션이 포함된 Tikzpicture

다음 그림을 만들고 싶습니다.

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

여기에서 다소 비슷한 그림에 대한 코드를 받았습니다.하위 그림과 캡션이 포함된 Tikzpicture하지만 위에 표시된 대로 원하는 형식으로 변경하지 마세요.

\documentclass{article}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{tikz}

\begin{document}
\begin{figure}
    \centering
    \subcaptionbox{subfigure a}[\textwidth]{
    \begin{tikzpicture}
        \def\length{6}   % Length of your arrow
        \def\height{0.5} % Height of your intersections
        \draw[->] (-\length,0) -- (\length,0);
        \node at (-2*\length/3,0) [yshift=-4,anchor=north]{X};
        \node at ( 0,0)           [yshift=-4,anchor=north]{Y};
        \node at ( 2*\length/3,0) [yshift=-4,anchor=north]{Z};
        \draw[-] (-\length/3,-\height/2) -- (-\length/3,\height/2);
        \draw[-] ( \length/3,-\height/2) -- ( \length/3,\height/2);
    \end{tikzpicture}
    }
    \subcaptionbox{subfigure b}[\textwidth]{
    \begin{tikzpicture}
        \def\length{6}   % Length of your arrow
        \def\height{0.5} % Height of your intersections
        \draw[->] (-\length,0) -- (\length,0);
        \node at (-2*\length/3,0) [yshift=-4,anchor=north]{X};
        \node at ( 0,0)           [yshift=-4,anchor=north]{Y};
        \node at ( 2*\length/3,0) [yshift=-4,anchor=north]{Z};
        \draw[-] (-\length/3,-\height/2) -- (-\length/3,\height/2);
        \draw[-] ( \length/3,-\height/2) -- ( \length/3,\height/2);
    \end{tikzpicture}
    }
\end{figure}
\end{document}

답변1

내가 사용하는 그림 사이의 분리를 subcaption block environment다양하게 할 수 있는 를 사용하는 것이 더 낫습니다 . 또한 이 환경을 사용하면 캡션을 넣을지 여부를 제어할 수 있습니다. 캡션 을 그림 앞이나 뒤에 넣을 경우 정의됩니다. 제안해주신 도면의 경우, 스타일과 좌표를 여러번 지정하지 않아도 되도록 도면 정의를 3개 만들어 두었습니다. 첫 번째를 사용하면 표시된 길이 ( 이 경우 텍스트 줄의 너비) 사이의 요소를 기준으로 위치에 마크를 배치할 수 있으므로 마크를 더 잘 배치할 수 있습니다. 각 마크에는 , a 및 a가 있어야 합니다 . 절대 좌표를 배치하지 않도록 다른 도면 정의에 사용됩니다 .vertical\captionsetup{skip=2em}belowabove\Xdoms01\linewidhtnamecontentcolornames

두 번째는 \Acot를 사용하여 정의된 2개의 마크 사이에 차원을 그립니다 names. \xdoms거기 에는 및 2이라는 명명된 좌표가 있으며 , 여기에서 차원이 시작되고 콘텐츠는 ( ) 및 경로의 텍스트 노드로 이동합니다.namename-upmiddlepos=0.5above

마지막 것은 tikz 라이브러리를 calc메서드와 함께 사용하는 중간점 "x"를 배치하는 데 사용 $(#1)!0.5!(#2)$되며 이름으로도 입력할 수 있는 두 노드 사이의 중간점을 찾은 다음 원이 그려지고 텍스트 노드를 정의하지만 배치하는 대신 특정 방향으로 노드로부터 node label특정 거리에 배치할 수 있는 해당 텍스트를 사용합니다 .label distance=0.7em-90

이렇게 하면 놀이터로 사용되는 추가 케이스를 포함하여 모든 케이스를 그릴 수 있습니다. 당연히 먼저 를 사용해야 \xdoms하고 나머지는 입력된 각 마크에 생성된 좌표의 이름을 사용하기 때문입니다.

결과:

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

MWE:

\documentclass{article}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,calc}

\def\Xdoms#1#2#3{%\Xdoms{length}{height}{Markers{position/name/content/color}}
    \draw(0,0)--++(#1,0);
    \foreach \position/\name/\content/\color in {#3}{
        \draw[draw=\color,thick]
        (#1*\position,0)++(0,#2/2)
            -- ++(0,-#2) node[below, minimum height=2em,inner sep=0]{\content};
        \coordinate (\name-up) at (#1*\position,#2*1.5);
        \coordinate (\name) at (#1*\position,0);
    }
}

\def\Acot#1#2#3#4{
    \draw[draw=#4,|-|](#1)--(#2)node [pos=0.5,above]{#3};
}
\def\Dotx#1#2#3#4{
    \fill[fill=#4]($(#1)!0.5!(#2)$) circle (3.5pt) node[below,label={[label distance=0.7em,#4]-90:#3}]{};
}


\begin{document}
    \setcounter{figure}{4}
    \begin{figure}
        \centering
        \caption {figure name}  
        \begin{subcaptionblock}{\textwidth}
            \begin{tikzpicture}
                \Xdoms{\linewidth}{0.5}{
                    0/Mk-0/0/black,%\position/\name/\content/\color
                    0.45/Mk-a/a/black,
                    0.65/Mk-b/b/black,
                    1/Mk-1/1/black%
                }
                \Acot{Mk-0-up}{Mk-a-up}{Text\_1}{red}
                \Acot{Mk-b-up}{Mk-1-up}{Text\_2}{blue}
                \Dotx{Mk-b}{Mk-1}{x}{black} 
            \end{tikzpicture}
            \captionsetup{skip=2em}
            \caption{Sub figure a}
        \end{subcaptionblock}
        \begin{subcaptionblock}{\textwidth}
            \begin{tikzpicture}
                \Xdoms{\linewidth}{0.5}{
                    0/Mk-0/0/black,%\position/\name/\content/\color
                    0.5/Mk-a/a/black,
                    1/Mk-1/1/black%
                }
                \Acot{Mk-0-up}{Mk-a-up}{Text\_1}{red}
                \Acot{Mk-a-up}{Mk-1-up}{Text\_2}{blue}
                \Dotx{Mk-a}{Mk-1}{x}{black} 
            \end{tikzpicture}
            \captionsetup{skip=2em}
            \caption{Sub figure b}
        \end{subcaptionblock}
        \begin{subcaptionblock}{\textwidth}
            \begin{tikzpicture}
                \Xdoms{\linewidth}{0.5}{
                    0/Mk-0/0/black,%\position/\name/\content/\color
                    1/Mk-1/1/black%
                }
                \Acot{Mk-0-up}{Mk-1-up}{Text\_2}{blue}
                \Dotx{Mk-0}{Mk-1}{x}{black} 
            \end{tikzpicture}
            \captionsetup{skip=2em}
            \caption{Sub figure c}
        \end{subcaptionblock}
        \begin{subcaptionblock}{\textwidth}
            \begin{tikzpicture}
                \Xdoms{\linewidth}{0.5}{
                    0/AA/A/red,%\position/\name/\content/\color
                    0.1/BB/B/black!20!red,
                    0.3/CC/C/black!30!red,
                    0.4/DD/D/black!40!red,
                    0.5/EE/E/black!50!red,
                    0.75/FF/F/black!60!red,
                    1/GG/G/black!70!red%
                }
                \Acot{AA-up}{CC-up}{A TO C}{blue}
                \Acot{DD-up}{FF-up}{D TO F}{blue!50!red}
                \Dotx{AA}{BB}{x}{green!50!blue}
                \Dotx{EE}{FF}{y}{green!50!cyan} 
            \end{tikzpicture}
            \captionsetup{skip=2em}
            \caption{Sub figure d playground}
        \end{subcaptionblock}
    \end{figure}
\end{document}

답변2

이것이 내가 귀하의 코드에서 얻은 것입니다.

결과

자막과 관련된 문제가 무엇인지 알 수 없습니다. 일러스트 자체 에 포함된 건가요 tikz? 똑같은 수치를 얻고 싶나요?

귀하의 질문을 명확히하십시오.

관련 정보