mejorando el sistema de coordenadas TikZ/curva de voltaje

mejorando el sistema de coordenadas TikZ/curva de voltaje

Soy algo nuevo en TikZ (esta es mi segunda foto de TikZ hasta ahora :))

Se ve más o menos como quiero que se vea, pero supongo que el código podría optimizarse. Tengo que dibujar bastantes curvas de voltaje similares, así que sería bueno si pudieras ayudarme a optimizarlas.

Tenga en cuenta: ¡La diferencia entre los tics de tiempo y la apariencia visual de la curva es intencionada!

¡Gracias!

\documentclass{article}
    \usepackage{tikz}
    \usepackage{verbatim}
    \usepackage[active,tightpage]{preview}

    \PreviewEnvironment{tikzpicture}
    \setlength\PreviewBorder{10pt}

\begin{document}
    \begin{tikzpicture}

% horizontal axis
\draw[->] (0,0) -- (6.5,0) node (xaxis) [anchor=north] {t};

% vertical axis
\draw[->] (0,0) -- (0,2.5) node (yaxis) [anchor=east] {U};

% line
\draw[dotted] (1,0) coordinate (a) -- (1,1);
\draw[dotted]   (2,0) -- (2,2)
            (4,0) -- (4,2)
            (5,0) -- (5,1)
            (6,0) -- (6,1);

% labels time
    \draw   (0.5,1) node[anchor=north] {$t_0$}
    (1.5,1) node[anchor=north] {$t_r$}
    (3,1) node[anchor=north] {$t_1$}
    (4.5,1) node[anchor=north] {$t_f$}
    (5.5,1) node[anchor=north] {$t_2$};

%labels timestep
\draw   (0,0) node[anchor=north] {0}
    (1,0) node[anchor=north] {1}
    (2,0) node[anchor=north] {4}
    (4,0) node[anchor=north] {10}
    (5,0) node[anchor=north] {11}
    (6,0) node[anchor=north] {13};        

%labels voltage
\draw   (-0.5,1) node {$U_1$}
    (-0.5,2) node {$U_2$};

% Us
\draw[thick] (0,1) -- (1,1) -- (2,2) -- (4,2) -- (5,1) -- (6,1);
%\draw[thick] (6,1) sin (7,0) cos (8,1);

    \end{tikzpicture}
\end{document}

gráfico

Respuesta1

Puede que el siguiente código ayude. Reduce todo el trazado de líneas de voltaje a un foreachbucle donde cada elemento consta de cuatro valores x coordinate/y coordinate/time label/segment label. Las coordenadas del punto inicial sonocultoparámetro interno initially.

\documentclass[tikz,border=10pt]{standalone}

\begin{document}
\begin{tikzpicture}

% horizontal axis
\draw[->] (0,0) -- (6.5,0) node (xaxis) [anchor=north] {t};

% vertical axis
\draw[->] (0,0) node[below]{0} -- (0,2.5) node (yaxis) [anchor=east] {U};

\foreach \x/\y/\t/\l [remember=\x as \lastx (initially 0), 
                       remember=\y as \lasty (initially 1)] in 
                       {1/1/1/$t_0$,2/2/4/$t_r$,4/2/10/$t_1$,5/1/11/$t_f$,6/1/13/$t_2$}{
% voltage line
    \draw (\lastx,\lasty)--(\x,\y);
% vertical reference
    \draw[dotted] (\x,\y)--(\x,0) node[below] {\t};
% time label
    \path (\lastx,1)--node[below] {\l} (\x,1);
}

\path (0,1) node[left] {$U_1$};
\path (0,2) node[left] {$U_2$};


\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

No estoy muy seguro de cómo se ve una curva de voltaje en general, pero parece que es necesario especificar algunas (t,U)coordenadas, etiquetas para el teje y los subíndices para las regiones. Usaría un \foreachbucle y arrojaría todo en una macro que acepte el voltaje inicial y una lista separada por comas de las "coordenadas" para la curva de voltaje como esta:

\documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{calc}
    \usepackage{verbatim}
    \usepackage[active,tightpage]{preview}

    \PreviewEnvironment{tikzpicture}
    \setlength\PreviewBorder{10pt}

    % \VoltageCurve[#1]{#2}
    %    #1 = optional initial voltage (default 1)
    %    #2 = comma separated list of t/U/t-label/t-subscript
    \newcommand\VoltageCurve[2][1]{%
       \begin{tikzpicture}
          \draw  (0,0) node[anchor=north] {0};
          \def\Umax{#1}
          \foreach \t/\U/\tlab/\tsub [remember=\t as \tt (initially 0),
                                      remember=\U as \UU (initially #1)] in {#2} {
             \draw  (\t,0) node[anchor=north] {\tlab};
             \draw[dotted](\t,0)--(\t,\U);
             \draw[thick](\tt,\UU)--(\t,\U);
             \node[anchor=north] at ($ (\tt,1)!0.5!(\t,1) $) {$t_\tsub$};
             \ifnum\U>\Umax\xdef\Umax{\U}\fi% Umax = max{y}
          }
          % axes
          \draw[thin,->] (0,0) -- (\tt+0.5,0) node [anchor=north] {t};
          \draw[thin,->] (0,0) -- (0,\Umax+0.5) node[anchor=east] {U};
          % labels
          \node at (-0.5, #1) {$U_1$};
          \node at (-0.5, \Umax) {$U_2$};
      \end{tikzpicture}%
    }

\begin{document}
    \VoltageCurve{1/1/1/0, 2/2/4/r, 4/2/10/1, 5/1/11/f, 6/1/13/2}

    \VoltageCurve[2]{1/1/1/0, 2/2/4/r, 5/3/10/1, 7/1/11/f, 8/3/13/2, 9/1/16/z}
\end{document}

Aquí está el resultado de mi MWE:

ingrese la descripción de la imagen aquí

Algunas palabras de explicación:

  • las barras diagonales separan las variables en el \foreachbucle
  • las variables \tty \UU"recuerdan" los valores anteriores de \ty \U, respectivamente
  • \Umaxrecuerda el valor máximo de \Upara dibujar el \Ueje
  • Se supone que las \tcoordenadas son crecientes.
  • el primer argumento opcional proporciona el voltaje inicial (predeterminado 1)
  • se supone que la primera \tetiqueta es0
  • para colocar la t_<sub>etiqueta utilizo \usetikzlibrary{calc}para determinar el punto medio entre \tty tusando ($ (\tt,1)!0.5!(\t,1) $). Podría ser mejor establecer la altura de estas etiquetas al voltaje inicial reemplazándola con ($ (\tt,#1)!0.5!(\t,#1) $).

información relacionada