如何使 tikzpicture 中的元素更好地定位?

如何使 tikzpicture 中的元素更好地定位?

我相信有更快或更好的方法来绘制类似于下面 MWE 中的图像。

在此处输入图片描述

正如您所见,我的方法相当繁琐。例如,我想学习一种方法,让箭头“起始”在 epsilon 符号上方(垂直箭头)并正好位于其东侧(红色箭头)。我通常会测试箭头的起始位置,直到看起来没问题为止。对于这个简单的图形来说,这是可以的,但将来这种方法会太耗时。

我尝试过使用nodeschildren认为我可以改变孩子的位置。我也尝试过使用draw但我无法让它们看起来哪怕是一半体面。

有人知道比我下面展示的更好的方法吗?最好使用,tikzpicture因为这是我最习惯的。

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}
\usetikzlibrary{positioning, arrows.meta}

\begin{document}

\begin{tikzpicture}

\node[left] at (0,0) {Endogenous variable};
\node[left] at (-2,-1.5) {$\epsilon_i$};
\node[right] at (1,0) {Dependent Variable};

\draw[->] (0,0) to (1,0); %Independent to Dependent Variable

\draw[->, color=red] (-1.8,-1.3) to (1,-0.5); %Epsilon to Dependent Variable

\draw[->] (-2.3,-1.3) to (-2.3,-0.25); %epsilon to Independent Variable

\end{tikzpicture}

\end{document}

答案1

欢迎来到 TeX.SX!让我给你几种不同的方法,因为我不知道你的不同图表最终应该是什么样子。

首先,您不需要环境axis。只有当您想使用 PGFplots 绘制图表时才需要环境,但这里不需要。

其次,命名节点是个好主意,因为一旦节点有了名称,就很容易相对于它们定位其他节点或在节点之间绘制箭头或线条。可以通过在括号中添加节点名称来为节点命名。例如,以下节点名为e

\node at (0,-1.5) (e) {$\epsilon_i$};

因此,第一个简单的方法可能是这样的:

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

\begin{document}
\begin{tikzpicture}

\node at (0,0) (endo) {Endogenous variable};
\node at (0,-1.5) (e) {$\epsilon_i$};
\node at (4,0) (dept) {Dependent variable};

\draw[->] (endo) to (dept); % Independent to Dependent Variable

\draw[->, red] (e) to (dept); % Epsilon to Dependent Variable

\draw[->] (e) to (endo); % Epsilon to Independent Variable

\end{tikzpicture}
\end{document}

在此处输入图片描述


现在,您已经加载了positioning上述示例中的库,但可能不知道它的好处。实际上,您可以使用这个库轻松地将节点相对于彼此定位。因此,您不需要以绝对方式定义任何坐标(第一个节点除外),这在某些情况下可能会派上用场:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}

\node at (0,0) (endo) {Endogenous variable};
\node[below=1cm of endo] (e) {$\epsilon_i$};
\node[right=1cm of endo] (dept) {Dependent variable};

\draw[->] (endo) to (dept); % Independent to Dependent Variable

\draw[->, red] (e) to (dept); % Epsilon to Dependent Variable

\draw[->] (e) to (endo); % Epsilon to Independent Variable

\end{tikzpicture}
\end{document}

在此处输入图片描述


最后,我想向你介绍一种绘制矩阵式图表的方法,也称为交换图。我不确定这是否是你想要的,但上面的图表当然也可以用这种方法创建。逻辑类似于数组的编码。在环境中tikzcd,所有节点都已经处于数学模式,因此你需要告诉 LaTeX 这两个文本元素不是数学:

\documentclass[border=10pt]{standalone}
\usepackage{tikz-cd}

\begin{document}
\begin{tikzcd}
\textrm{Endogenous variable} \arrow[r] & \textrm{Dependent variable} \\
\epsilon_i \arrow[u] \arrow[ur, red] & 
\end{tikzcd}
\end{document}

在此处输入图片描述


当然,还有更多的方法可以实现上述输出。这取决于您要创建的图表的逻辑。

相关内容