你好。我需要将短语“活跃用户”居中,也就是说,我想将其放在中间,而不是放在右边或左边。还有一件事,我需要将现在为白色的两个单元格着色。我不知道为什么,但它们应该是灰色的。
代码
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{matrix}
\usepackage{lmodern}
\begin{document}
\begin{tikzpicture}[font=\footnotesize,b/.style={text=blue,font=\bfseries}]
\matrix(m)[matrix of nodes,
nodes={minimum size=5ex,anchor=center,draw},
row 1/.style={nodes={draw=none,fill=none}},
column 5/.style={nodes={fill=white}},
column 6/.style={nodes={fill=gray!20}},
column 7/.style={nodes={fill=gray!20}},
row 4/.style={nodes={fill=none}},
column 1/.style={nodes={draw=none,fill=none}},
row sep=-\pgflinewidth,
column sep={-\pgflinewidth},
nodes in empty cells,
]{
& $i_{1}$& $i_{2}$ & $i_{3}$ & \dots &$ i_{k}$ & $ i_{a}$ & \dots &$ i_{n}$ \\
$u_{1}$ & & & & & |[b]| c & |[b]| ? & & \\
$u_{2}$ & & & & & |[b]| c & |[b]| c & &\\
|[fill=none]|\dots & & & & & & & & \\
$u_{j}$ & & & & & & & & \\
$u_{a}$ & & & & & |[b]| c &|[b]| c & & \\
\dots& & & & & & & & \\
$u_{6}$ & & & & & |[b]| c & |[b]| c & & \\
};
% \draw[-latex](m-6-9.east)--+(1,0)node[above right]{}|-(m-5-9.east);
\node[left]at(m-6-1.west){Active user};
% \draw[latex-] (m-1-6) -- ++ (-1,1) node[above left,align=left]
% {Item preference score is\\ predicted for active user};
\draw[latex-] (m-1-7) -- ++ (0,1) node[above right,align=right]
{Active item};
\draw[-latex]([xshift=-1pt]m-8-7.south east)--++(0,-1) -|
([xshift=2pt]m-8-6.south west)
node[pos=0.25,below]{Item similarity}
node[pos=0.25,above,font=\tiny]{$\mathrm{sim}(i_{k},i_{a})$};
\end{tikzpicture}
\end{document}
答案1
对于定心问题,您有以下代码:
\draw[latex-] (m-1-7) -- ++ (0,1) node[above right,align=right]
{Active item};
那应该是:
\draw[latex-] (m-1-7) -- ++ (0,1) node[above]
{Active item};
(Anode[above,shift={(0,-0.1)}]
也可用于负或正垂直移位)
对于颜色问题,它是由以下线条引起的:
row 4/.style={nodes={fill=none}},
这是在读取列(灰色)颜色后从编译器读取并覆盖它们。据我所知,这一行其实没什么用,所以只需将其删除即可。
答案2
这个矩阵被称为(m)
足以将文本锚定到这样的west
矩阵:您的矩阵有 8 行,文本堆放在第四列和第五列之间。(m)
\node[left]at(m.west){Active user};
除非你想让它位于最后 7 行的中心?
至于灰色,只需从第 4 行去除白色即可。
% row 4/.style={nodes={fill=none}},
虽然您没有要求将文本居中Active item
,并且@koleygr 给出了一种方法,但我给出了另一种使用该positioning
库的方法。它包括将文本定位在上方并使用edge operation
在两个节点之间绘制箭头。
\node[above= 5mm of m-1-7] {Active item}edge[->](m-1-7);
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{matrix}
\usepackage{lmodern}
\begin{document}
\begin{tikzpicture}[font=\footnotesize,b/.style={text=blue,font=\bfseries}]
\matrix(m)[matrix of nodes,
nodes={minimum size=5ex,anchor=center,draw},
row 1/.style={nodes={draw=none,fill=none}},
column 5/.style={nodes={fill=white}},
column 6/.style={nodes={fill=gray!20}},
column 7/.append style={nodes={fill=gray!20}},
% row 4/.style={nodes={fill=none}},
column 1/.style={nodes={draw=none,fill=none}},
row sep=-\pgflinewidth,
column sep={-\pgflinewidth},
nodes in empty cells,
]{
& $i_{1}$& $i_{2}$ & $i_{3}$ & \dots &$ i_{k}$ & $ i_{a}$ & \dots &$ i_{n}$ \\
$u_{1}$ & & & & & |[b]| c & |[b]| ? & & \\
$u_{2}$ & & & & & |[b]| c & |[b]| c & &\\
|[fill=none]|\dots & & & & & & & & \\
$u_{j}$ & & & & & & & & \\
$u_{a}$ & & & & & |[b]| c &|[b]| c & & \\
\dots& & & & & & & & \\
$u_{6}$ & & & & & |[b]| c & |[b]| c & & \\
};
% \draw[-latex](m-6-9.east)--+(1,0)node[above right]{}|-(m-5-9.east);
%\node[left]at(m.west){Active user};
\node[above= 5mm of m-1-7] {Active item}edge[->](m-1-7);
% \draw[latex-] (m-1-6) -- ++ (-1,1) node[above left,align=left]
% {Item preference score is\\ predicted for active user};
\draw[latex-] (m-1-7) -- ++ (0,1) node[above right,align=right]
{Active item};
\draw[-latex]([xshift=-1pt]m-8-7.south east)--++(0,-1) -|
([xshift=2pt]m-8-6.south west)
node[pos=0.25,below]{Item similarity}
node[pos=0.25,above,font=\tiny]{$\mathrm{sim}(i_{k},i_{a})$};
\end{tikzpicture}
\end{document}