我为 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 sep
。row sep
在这种情况下default
使用列和行分隔,但第一行和第二行之间除外,其中特定分隔已使用 固定\\[1cm]
。
Amatrix
也是node
,因此应用于matrix
节点的所有选项也应用于内部节点。因此minimum width
和固定minimum height
了mybox
内部节点的最小宽度和高度。我们可以nodes={...}
在矩阵选项声明的末尾用 来更改它。无论如何,我认为最好不要minimum width/height
在矩阵选项中使用,因为矩阵足够大,可以包含所有内部节点。
Contents
谷歌图标下方的文本已被绘制为label
而不是常规节点。
我已经更改了图标,因此,请根据您的喜好进行调整。
我也改成了tikzstyle
。tikzset
请看一下应该使用 \tikzset 还是 \tikzstyle 来定义 TikZ 样式?
我使用了matrix
因为 OP 也这么做了。还有其他一些解决方案可以获得类似的结果:放置图标并用fit
库帮助围绕它们,在里面绘制内部图形tcolorbox
或mdframe
,...
\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}