编辑

编辑

我正在尝试用 tikz 绘制一个简单的图形:

在此处输入图片描述

感谢您的帮助

这是我目前所拥有的:

%\documentclass[tikz]{standalone}
\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}

\draw[very thick,->] (0,0) -- (10,0);
\draw[blue!80,fill=blue!50] (2,0) circle (.2cm);
\draw[blue!80,fill=blue!50] (4,0) circle (.2cm);
\draw[blue!80,fill=blue!50] (6,0) circle (.2cm);
\draw[blue!80,fill=blue!50] (8,0) circle (.2cm);
\end{tikzpicture}

\end{document}

答案1

如果将圆圈画为圆形节点,那么可以使用label语法将标签放在它们的上方和下方。

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

让我们加载一些更精美的箭头来改进当前的箭头。

\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}

如果我们要将圆圈画为节点,那么定义一个具有所需设置的标准样式是有意义的,以避免重复相同的设置,并且在需要时更容易修改它们。

  [
    my blue/.style={blue!80,  fill=blue!50, minimum width=4mm, circle, inner sep=0pt},

这应该绘制出圆形节点,看起来很像circle原始代码中定义的 s。

我们希望没有文字,因此让我们为图片设置文字。

    font=\sffamily
  ]

我们像以前一样开始,但是我们用一个更奇特的箭头代替普通的箭头-{Stealth[]}

  \draw[very thick,-{Stealth[]}] (0,0) -- (10,0)

我们可以使用以下方法分别放置每个节点

\node [my blue, label={[text=blue!80]above:<label>}, label={[text=blue!80]below:<label>}] at <location> {};

但这样需要输入很多内容,所以让我们使用循环来绘制我们想要的 4 个圆圈并放置标签。我们可以通过将 a 添加0到步骤数来得出下部标签:1020等等30。因此,我们需要一个变量来存储上部标签 -\i以及另一个变量来保持计数 -\n比如说。然后我们的循环将如下所示:

    foreach \i [count=\n] in {AA,BB,CC,DD}
    {
      node [pos=\n/5, my blue, label={[text=blue!80]above:\i}, label=below:\n 0] {}
    } 

如下图所示,每个节点的位置也是从 计算出来的\n。因此,这是一种绘制圆圈并标记它们的非常有效的方法。

当我们在这里时,我们不妨在线的中间添加一个我们想要“f1”标记的坐标,但将此标记作为附加步骤添加会更容易。

      coordinate [midway] (f1) 

最后,我们在“temp”标签行的最右侧添加一个节点。

      node [right] {temp};

现在我们只需要添加垂直标记和标签“f1”,我们将坐标放在(f1)上面。我们可以使用语法使用相对坐标来执行此操作+。如果我们向下绘制,则只需添加标签节点即可below

  \draw [very thick] (f1) ++(0,2mm) -- (f1) -- ++(0,-2mm) node [below] {f\textsubscript{1}};

我们使用\textsubscript而不是$f_1$因为,这样,我们就可以按照需要保留无衬线字体。

\end{tikzpicture}
\end{document}

我们完成了!

临时箭头

完整代码:

\documentclass[border=5pt, multi, tikz]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
  [
    my blue/.style={blue!80,  fill=blue!50, minimum width=4mm, circle, inner sep=0pt},
    font=\sffamily
  ]
  \draw[very thick,-{Stealth[]}] (0,0) -- (10,0)
    foreach \i [count=\n] in {AA,BB,CC,DD}
    {
      node [pos=\n/5, my blue, label={[text=blue!80]above:\i}, label=below:\n 0] {}
    } coordinate [midway] (f1) node [right] {temp};
  \draw [very thick] (f1) ++(0,2mm) -- (f1) -- ++(0,-2mm) node [below] {f\textsubscript{1}};
\end{tikzpicture}
\end{document}

编辑

我想添加以下方法,用一行 TikZ 代码生成图表。这使用decorations.markings库代替依赖第二行 TikZ 代码。虽然我最初想过这样做,但我并不认为为了一行代码而费心是值得的。尽管如此,在提供了实现基本相同想法的代码后,我认为展示如何使用现有库来实现这一点可能会很有用。

除了删除第二条\draw命令外,我们还可以删除 的坐标规范,因为(f1)我们不需要它。相反,我们将节点和垂直线添加为,并将其作为decoration应用于第一条命令。这意味着装饰被绘制\drawpostaction原来的线,正如我们想要的,而不是而不是它,就像我们简单地说一样decorate

所需的附加选项\draw包括

postaction=decorate, decoration={markings, mark=at position .5 with {\arrow{|}\node [below, yshift=-1mm, anchor=north] {f\textsubscript{1}}; } }

的内容decoration指定装饰的类型,markings以及该装饰的设置。mark=at position .5将其放在中间点并with {<stuff>}指定要使用什么作为标记。库\arrow{<arrow tip>}专门提供,decorations.markings以便于使用箭头作为标记。然后,我们在其下方添加节点,并像以前一样稍微向下移动。

结果:

一步标记温度线

完整代码:

\documentclass[border=5pt, multi, tikz]{standalone}
\usetikzlibrary{arrows.meta,decorations.markings}
\begin{document}
\begin{tikzpicture}
  [
    my blue/.style={blue!80,  fill=blue!50, minimum width=4mm, circle, inner sep=0pt},
    font=\sffamily
  ]
  \draw[very thick, -{Stealth[]}, postaction=decorate, decoration={markings, mark=at position .5 with {\arrow{|}\node [below, yshift=-1mm, anchor=north] {f\textsubscript{1}}; } }] (0,0) -- (10,0)
    foreach \i [count=\n] in {AA,BB,CC,DD}
    {
      node [pos=\n/5, my blue, label={[text=blue!80]above:\i}, label=below:\n 0] {}
    } node [right] {temp};
\end{tikzpicture}
\end{document}

答案2

你可以用以下语法修饰路径node [地点] {内容}。 例如,地点可以是aboveright=10pt

\documentclass{article}
\usepackage{tikz}
% to reduce typing
\newcommand{\decor}[2]{node [above=10pt] {#1} node [below=10pt]
  {\textcolor{black}{#2}}}

\begin{document}
\begin{tikzpicture}
\draw[very thick, ->] (0,0) -- (10,0) node [right] {temp};
\draw[blue!80,fill=blue!50] (2,0) circle (.2cm) \decor{AA}{10};
\draw[blue!80,fill=blue!50] (4,0) circle (.2cm) \decor{BB}{20};
\draw[blue!80,fill=blue!50] (6,0) circle (.2cm) \decor{CC}{30};
\draw[blue!80,fill=blue!50] (8,0) circle (.2cm) \decor{DD}{40};
\draw[very thick] (5,0.5) -- (5,-0.5) node [below] {\(f_1\)};
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案3

你可以用循环来实现。以下是一些注释版本

\begin{tikzpicture}
\draw[very thick,-latex] (0,0) -- (8,0);% That arrow head is called 'latex'

\foreach \x % do things multiple times with index \x
  [count=\xi] % when going through the list also count the index with \xi
  in {A,...,D}{ % tikz understands alphabetical sequences
    \node[fill=blue!10,circle,% give the node options
          label={[text=blue!10]90:\x\x},% put the letters
          label={[text=blue!10]270:\xi0},
          inner sep=2mm%increase the size a bit
          ]
          (n-\xi) % give a name
          at (2*\xi-1,0) % place them at odd numbered x's
          {}; % Nothing is written inside the disks
}
\end{tikzpicture}

相关内容