如何绘制速度时间图的负 y 轴?

如何绘制速度时间图的负 y 轴?

我有这个速度-时间图,但我不知道如何绘制带有刻度(-1,-2)的负$y$轴。

这是代码:

\documentclass{article}
\usepackage{amsmath}
\usepackage{siunitx}
\usepackage{physics}
\usepackage{tikz}
\tikzset{>=latex} % for LaTeX arrow head

\colorlet{myblue}{blue!70!black}
\colorlet{mydarkblue}{blue!40!black}
\colorlet{mygreen}{green!60!black}
\colorlet{myred}{red!65!black}
\colorlet{mypurple}{red!50!blue!95!black!75}
\tikzstyle{wave}=[myblue,thick]
\tikzstyle{xline}=[very thick,myblue]
\tikzstyle{vline}=[very thick,mygreen]
\tikzstyle{aline}=[very thick,mypurple]
\tikzstyle{mydashed}=[mydarkblue,dashed]

\def\tick#1#2{\draw[thick] (#1) ++ (#2:0.1) --++ (#2-180:0.2)}
\def\tlabel{$t\,\left[\si{s}\right]$}
\def\vlabel{$v\,\left[\si{m/s}\right]$}
\def\alabel{$a\,\left[\si{m/s^2}\right]$}

\begin{document}
% VELOCITY
    \def\xmax{6} % maximum x axis (time)
    \def\ymax{2.0} % maximum y axis (velocity)
    \def\tmax{180} % maximum time on x axis
    \begin{tikzpicture}
        \def\vmax{3} % maximum velocity on x axis
        \def\xscale{\xmax/\tmax}
        \def\yscale{\ymax/\vmax}
        
        % GRID
        \foreach \t in {0,20,...,\tmax}{
            \draw[black!80,dotted] (\t*\xscale,0) --++ (0,\vmax*\yscale+1);
            \tick{\t*\xscale,0}{90} node[below=-1,scale=0.77] {\t};
        }
        \foreach \v in {0,2,...,\vmax}{
            \draw[black!80,dotted] (0,\v*\yscale) --++ (\tmax*\xscale+0.3,0);
            \tick{0,\v*\yscale}{0} node[left=-1,scale=0.77] {\v};
        }
        
        % AXES
        \draw[->,thick]
        (0,0) -- (\xmax+1,0) node[midway,below=9] {\tlabel};
        \draw[->,thick]
        (0,0) -- (0,\ymax+1) node[midway,rotate=90,above=9] {\vlabel};
        
        % GRAPH
        \draw[vline,line cap=round,xscale=\xscale,yscale=\yscale]
        (0,0) -- (40,2) -- (60,2) -- (160,-2);
        
    \end{tikzpicture}
\end{document}

蒂克兹

答案1

如果pgfplots没有这个选项,我会使用命令grid及其相关help lines样式来绘制网格。它的使用非常简单:

\draw [help lines] (<x1>, <y1>) grid (<x2>, <y2>);

此外,正如您所定义的xscaleyscale我建议将这些选项作为整体的参数tikzfigure,如下所示:

\begin{tikzpicture}[xscale=\xscale,yscale=\yscale,% etc...

这样您就可以使用t- 和v-坐标,而不是绝对几何 x 和 y 坐标。

最后,我稍微重新整理了一下代码,以便我认为它更清晰一些。

\documentclass{article}
\usepackage{amsmath}
\usepackage{siunitx}
\usepackage{physics}
\usepackage{tikz}
\tikzset{>=latex} % for LaTeX arrow head
\usetikzlibrary{backgrounds}

\colorlet{myblue}{blue!70!black}
\colorlet{mydarkblue}{blue!40!black}
\colorlet{mygreen}{green!60!black}
\colorlet{myred}{red!65!black}
\colorlet{mypurple}{red!50!blue!95!black!75}
\tikzstyle{wave}=[myblue,thick]
\tikzstyle{xline}=[very thick,myblue]
\tikzstyle{vline}=[very thick,mygreen]
\tikzstyle{aline}=[very thick,mypurple]
\tikzstyle{mydashed}=[mydarkblue,dashed]

\def\tick#1#2{\draw[thick] (#1) ++ (#2:0.1) --++ (#2-180:0.2)}
\def\tlabel{$t\,\left[\si{s}\right]$}
\def\vlabel{$v\,\left[\si{m/s}\right]$}
\def\alabel{$a\,\left[\si{m/s^2}\right]$}

\begin{document}
% VELOCITY
\def\xmax{6} % maximum x axis (time)
\def\ymax{2.0} % maximum y axis (velocity)
\def\tmax{180} % maximum time on x axis
\def\vmax{3} % maximum velocity on y axis
\def\tstep{20} % step of ticks in t-axis
\def\vstep{1} % step of ticks in v-axis
\def\xscale{\xmax/\tmax}
\def\yscale{\ymax/\vmax}
\begin{tikzpicture}[xscale=\xscale,yscale=\yscale,
  help lines/.style={black!80,dotted,ystep=1,xstep=20}]
  
  % GRID
  \draw [help lines,on background layer] (-\tstep,-2*\vstep) grid (\tmax,\vmax);

  % TICKS
  \foreach \t in {-\tstep,0,...,\tmax}{
    \tick{\t,0}{90} node[below=-1,scale=0.77] {\t};
  }
  \pgfmathtruncatemacro{\vtickmax}{\vmax+2*\vstep}
  \foreach \v [evaluate=\v as \vv using int(\v-2*\vstep)] in {0,\vstep,...,\vtickmax}{
    \tick{0,\v-2*\vstep}{0} node[left=-1,scale=0.77] {\vv};
  }

  % AXES
  \draw[->,thick] (-2*\tstep,0) -- (\tmax+\tstep,0) node[right] {\tlabel};
  \draw[->,thick] (0,-3*\vstep) -- (0,\vmax+\vstep) node[above] {\vlabel};

  % CURVE
  \draw[vline,line cap=round] (0,0) -- (40,2) -- (60,2) -- (160,-2);
  
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容