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, который позволит вам изменять verticalразделение между используемыми мной фигурами \captionsetup{skip=2em}, затем также с помощью этой среды вы можете контролировать, будут ли подписи идти belowили above, это определяется, если вы поместите подпись до или после рисунка; В случае предлагаемого вами рисунка я создал 3 определения рисунка, чтобы не указывать стили и координаты много раз. Первое \Xdoms, позволяет вам размещать метки в позициях относительно фактора между 0и 1указанной длины, в данном случае ширины текстовой строки \linewidht, таким образом вы можете лучше размещать метки, каждая метка должна иметь name, contentи color, namesбудет использоваться для других определений рисунка, чтобы не размещать абсолютные координаты.

Второй метод \Acotрисует измерение между двумя отметками, определенными с помощью их names; помните, что \xdomsсуществуют 2именованные координаты nameи name-up, с которых начинаются измерения, затем содержимое помещается в текстовые узлы в middle( pos=0.5) и aboveпуть.

Последний используется для размещения средней точки «x», которая использует библиотеку tikz calcс методом $(#1)!0.5!(#2)$, находит среднюю точку между двумя узлами, которые также могут быть введены как имена, затем рисуется круг и определяется текстовый узел, но вместо размещения соответствующего текста я использую , который node labelя могу разместить на определенном расстоянии label distance=0.7emот узла в определенной ориентации -90.

Сделав это, можно нарисовать все случаи, включая дополнительный случай в качестве игровой площадки, очевидно, сначала нужно использовать \xdoms, а затем остальные, поскольку они используют имена координат, которые создаются в каждой введенной отметке.

РЕЗУЛЬТАТ:

введите описание изображения здесь

МВЭ:

\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самой иллюстрацией? Вы хотите получить ту же самую фигуру?

Пожалуйста, уточните Ваш вопрос.

Связанный контент