矩阵中的中心标签并固定行颜色

矩阵中的中心标签并固定行颜色

你好。我需要将短语“活跃用户”居中,也就是说,我想将其放在中间,而不是放在右边或左边。还有一件事,我需要将现在为白色的两个单元格着色。我不知道为什么,但它们应该是灰色的。

代码

\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}

相关内容