Как настроить текст галочки в TikZ?

Как настроить текст галочки в TikZ?

МВЭ:

\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{datavisualization.formats.functions}

\begin{document}

  \begin{tikzpicture}
    \datavisualization[
                       scientific axes={clean},
                       all axes = grid,
                       x axis = {
                                 min value = 0,
                                 ticks = {
                                          major = {
                                                   also at = 1.5 as $T_0$,
                                                   at = 2 as $T_0 + T_1$
                                                  },
                                          stack
                                         },
                                 label = $t$
                                },
                       y axis = {
                                 min value = 0,
                                 ticks = {major = {also at = 4.5 as $K$}},
                                 label = $y(t)$
                                },
                       visualize as smooth line/.list = {
                                                         curve,
                                                         line 1,
                                                         line 2
                                                        },
                       line 2 = {style = dashed}
                      ]
    data[
         set = curve,
         format = function
        ] {
           var x : interval[1.5 : 6];
           func y = 9/2 * (1 - exp(3 - 2 * \value x));
          }
    data[set = line 1] {
                        x,   y
                        1.5, 0
                        2,   4.5
                       }
    data[set = line 2] {
                        x, y
                        2, 4.5
                        2, 0
                       };
  \end{tikzpicture}

\end{document}

at = 2 as $T_0 + T_1$полностью отключая остальные галочки и игнорируя also at = 1.5 as $T_0$:

Рисунок 1

Если я изменю строку 16 на also at = 2 as $T_0 + T_1$то я получу

фигура 2

Итак, как можно получить пользовательский текст галочки, не отключая/не перекрашивая автоматически сгенерированные галочки? Второй вопрос: как можно разместить T_0и T_0 + T_1не перекрывая?

Заранее благодарю вас за вашу помощь и усилия!

решение1

Это делает что-то в этом роде. Для того, чтобы один дополнительный тик не стирал предыдущий, вам нужно ключ /.list. Чтобы избежать наложений, вы можете использовать сдвиги. Так что в целом

major also at/.list={ 1.5 as    $T_0$,
           2 as [node style={yshift=-2em}] $T_0 + T_1$},

Полная МВЭ:

\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{datavisualization.formats.functions}

\begin{document}

  \begin{tikzpicture}
    \datavisualization[
       scientific axes={clean},
       all axes = grid,
       x axis = {
          min value = 0,
          ticks = {
               major also at/.list={ 1.5 as $T_0$,
               2 as [node style={yshift=-2em,alias=pft}] $T_0 + T_1$},
             stack
            },
          label = $t$
         },
       y axis = {
          min value = 0,
          ticks = {major = {also at = 4.5 as $K$}},
          label = $y(t)$
         },
       visualize as smooth line/.list = {
          curve,
          line 1,
          line 2
         },
       line 2 = {style = dashed}
      ]
    data[
         set = curve,
         format = function
        ] {
           var x : interval[1.5 : 6];
           func y = 9/2 * (1 - exp(3 - 2 * \value x));
          }
    data[set = line 1] {
                        x,   y
                        1.5, 0
                        2,   4.5
                       }
    data[set = line 2] {
                        x, y
                        2, 4.5
                        2, 0
                       };
   \draw[very thin] (pft.north) -- ++ (0,1em);
  \end{tikzpicture}

\end{document}

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

решение2

€dit³



Предложение сpgfplots:

Я думаю, вы хотите что-то подобное...

· Один из методов — настройка extra x ticks, см. " T_0+T_1"; та же игра с " K" с использованием extra y ticks.

· Другой метод — добавить специальные метки в качестве drawаннотаций, см. « T_0», « » T_1, « и « T_a», « T_b»:

Если вы хотите использовать разную длину делений для своих меток, вам может подойти второй метод.

Ниже показаны оба способа.

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

\documentclass[border=5pt, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{backgrounds}
\begin{document}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\begin{tikzpicture}
\pgfmathsetlengthmacro\MajorTickLength{
\pgfkeysvalueof{/pgfplots/major tick length}*0.5}
\pgfmathsetlengthmacro\AxisShift{-4.5pt}
\begin{axis}[ 
xmin=-0, 
xmax=6.0, 
ymin=0,
ymax=4.5,
%axis lines=middle,
axis y line=middle, 
axis x line=bottom,
axis line style={-, gray},
major tick length=\MajorTickLength,
every tick/.style={gray},
tick align=outside,
y axis line style={xshift=\AxisShift},
every y tick/.style={xshift=\AxisShift},
yticklabel style={xshift=\AxisShift},
x axis line style={yshift=\AxisShift},
every x tick/.style={yshift=\AxisShift},
x tick label style={yshift=\AxisShift, fill=white},
ylabel={\rotatebox{90}{$y(t)$}},
xlabel={$t$},
x label style={at={(ticklabel* cs:0.975)}, inner sep=5pt, yshift=4*\AxisShift, anchor=north},
y label style={at={(ticklabel* cs:0.55)}, inner sep=5pt, xshift=3.5*\AxisShift, anchor=east},
xtick={0,...,6},
ytick={1,...,4},
extra y ticks={0,4.5},
extra y tick labels={0,$K$},
grid=major, 
extra x ticks={2},
extra x tick labels={$T_0 + T_1$},
extra x tick style={major tick length=-5.25*\AxisShift, on background layer},
%enlarge y limits={abs=0.4,upper},
]
% Curve
\addplot [domain=1.5:6, samples=222, thick]{9/2 *(1 -exp(3 -2*x)};
% Line 1 as parametric plot
\addplot[dashed, variable=\t, samples=2, thick]({2},{\t}) ;       
% Line 2 as table-plot
\addplot[no marks, thick,] table[x=X,y=Y] {
X     Y
1.5   0
2     4.5
};
% Some special labels ===================
\begin{pgfonlayer}{foreground}
\foreach \T/\Name in {0.5/T_1, 1.5/T_0, 3.85/T_a, 4.6/T_b} {\edef\temp{\noexpand
\draw [gray, yshift=\AxisShift] (\T,0) -- (\T,2.75*\AxisShift) node[below, text=black, inner sep=2pt]{$\Name$}; 
}\temp}
\end{pgfonlayer}
% ================================
\end{axis}   

\end{tikzpicture}
\end{document}   

решение3

Я обнаружил возможность решить эту задачу с помощью встроенного метода. [{tick text padding = 'some value some measurement'}]И clean ticksсделайте это, смотрите мой MWE:

\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{datavisualization.formats.functions}

\begin{document}

  \begin{tikzpicture}
    \datavisualization[
                       scientific axes={clean},
                       all axes = grid,
                       x axis = {
                                 min value = 0,
                                 ticks = {
                                          major = {
                                                   also at = 1.5 as $T_0$,
                                                   also at = 2 as [{tick text padding = 1.5em}] $T_0 + T_1$ % <--- changed !!!!!
                                                  },
                                          %stack <--- removed !!!!!
                                         },
                                 label = $t$
                                },
                       y axis = {
                                 min value = 0,
                                 ticks = {major = {also at = 4.5 as $K$}},
                                 label = $y(t)$
                                },
                       clean ticks, % <--- added !!!!!
                       visualize as smooth line/.list = {
                                                         curve,
                                                         line 1,
                                                         line 2
                                                        },
                       line 2 = {style = dashed}
                      ]
    data[
         set = curve,
         format = function
        ] {
           var x : interval[1.5 : 6];
           func y = 9/2 * (1 - exp(3 - 2 * \value x));
          }
    data[set = line 1] {
                        x,   y
                        1.5, 0
                        2,   4.5
                       }
    data[set = line 2] {
                        x, y
                        2, 4.5
                        2, 0
                       };
  \end{tikzpicture}

\end{document}

и результат

результат

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