Tikz 矩阵节点内部定位

Tikz 矩阵节点内部定位

我为 tikz 创建了一个如下所示的图形:

在此处输入图片描述

但是当我将它添加到矩阵节点中时,它变成了这样:

在此处输入图片描述

为什么会发生这种情况?

我的第一个代码是:

\begin{tikzpicture}
\node[](users){\includegraphics[scale=0.5]{icons/user.png} };
\node[below of=users,yshift=-20](google){\includegraphics[scale=0.3]{icons/googleplus.png} };
\node[below left of=users,yshift=-10](facebook){\includegraphics[scale=0.3]{icons/facebook.png} };
\node[below right of=users,yshift=-10](twitter){\includegraphics[scale=0.5]{icons/tweets.png} };
\draw[->,line width=1] (users)--(facebook);
\draw[->,line width=1] (users)--(google);
\draw[->,line width=1] (users)--(twitter);
\node[below of=google,yshift=8]{Content};
\end{tikzpicture}

我的第二个代码是:

\begin{tikzpicture}
\tikzstyle{mybox} = [draw=red, fill=blue!20, very thick,rectangle, rounded corners,minimum width=1.5cm,minimum height=3cm]
\tikzstyle{fancytitle} =[fill=red, text=white,rounded corners]
\node [matrix,mybox] (data){
\node[minimum size=2cm]{};
\node[](users){\includegraphics[scale=0.5]{icons/user.png} };
\node[below of=users,yshift=-20](google){\includegraphics[scale=0.3]{icons/googleplus.png} };
\node[below left of=users,yshift=-10](facebook){\includegraphics[scale=0.3]{icons/facebook.png} };
\node[below right of=users,yshift=-10](twitter){\includegraphics[scale=0.5]{icons/tweets.png} };
\draw[->,line width=1] (users)--(facebook);
\draw[->,line width=1] (users)--(google);
\draw[->,line width=1] (users)--(twitter);
\node[below of=google,yshift=8]{Content};
\\
};
\node[fancytitle, right=10pt] at (data.north west) {Data};
\end{tikzpicture}

答案1

下一个代码显示如何使用 绘制该图matrix

如果使用 则matrix不需要使用positioning,所有节点都根据具有特定 和 的行和列进行调整column seprow sep在这种情况下default使用列和行分隔,但第一行和第二行之间除外,其中特定分隔已使用 固定\\[1cm]

Amatrix也是node,因此应用于matrix节点的所有选项也应用于内部节点。因此minimum width和固定minimum heightmybox内部节点的最小宽度和高度。我们可以nodes={...}在矩阵选项声明的末尾用 来更改它。无论如何,我认为最好不要minimum width/height在矩阵选项中使用,因为矩阵足够大,可以包含所有内部节点。

Contents谷歌图标下方的文本已被绘制为label而不是常规节点。

我已经更改了图标,因此,请根据您的喜好进行调整。

我也改成了tikzstyletikzset请看一下应该使用 \tikzset 还是 \tikzstyle 来定义 TikZ 样式?

我使用了matrix因为 OP 也这么做了。还有其他一些解决方案可以获得类似的结果:放置图标并用fit库帮助围绕它们,在里面绘制内部图形tcolorboxmdframe,...

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{positioning, matrix}

\tikzset{mybox/.style={draw=red, fill=blue!20, very thick,
            rectangle, rounded corners,
            minimum width=1.5cm,minimum height=3cm},
    fancytitle/.style={fill=red, text=white,rounded corners}}

\begin{document}

\begin{tikzpicture}
\node [matrix,mybox, nodes={minimum height=0pt}] (data){
& 
\node[](users){\includegraphics[scale=0.25]{user} }; & \\[1cm]

\node[](facebook){\includegraphics[scale=0.25]{facebook} }; & & 
\node[](twitter){\includegraphics[scale=0.25]{tweeter} };
\\
& \node[label=below:Content](google){\includegraphics[scale=0.25]{google+} }; \\
};
\draw[->,line width=1] (users)--(facebook);
\draw[->,line width=1] (users)--(google);
\draw[->,line width=1] (users)--(twitter);
\node[fancytitle, right=10pt] at (data.north west) {Data};
\end{tikzpicture}

\end{document}

在此处输入图片描述

第二版本:没有矩阵,但positioning有背景fit节点:

\begin{tikzpicture}

\node (users){\includegraphics[scale=0.25]{user}}; 

\node[below left = 1cm and 1mm of users](facebook){\includegraphics[scale=0.25]{facebook} }; 
\node[below right = 1cm and 1mm of users](twitter){\includegraphics[scale=0.25]{tweeter} };
\node[label={[name=label]below:Content}, below=18mm of users](google){\includegraphics[scale=0.25]{google+} };

\draw[->,line width=1] (users)--(facebook);
\draw[->,line width=1] (users)--(google);
\draw[->,line width=1] (users)--(twitter);
\begin{scope}[on background layer]
\node[fit={(users) (twitter) (label) (facebook)}, draw=red, fill=blue!20, very thick, rounded corners, append after command={node[fancytitle, anchor=west] at ([xshift=3mm]\tikzlastnode.north west) {Data}}] {};
\end{scope}
\end{tikzpicture}

相关内容