使用 TikZ/PGF 绘制实值矩阵,类似 matlab 中的 imshow

使用 TikZ/PGF 绘制实值矩阵,类似 matlab 中的 imshow

如何使用 TikZ/PGF 绘制实值矩阵,使其看起来像imshow在 MATLAB 中绘制的那样?

\addplot3做了类似的事情,但我想在彩色编码的二维图中实现它。

答案1

下面的代码可以很好地完成这个工作:

\begin{tikzpicture}
  \begin{axis}[view={0}{90},
               xlabel=$x$,
               ylabel=$y$,
               title=View from top]
    \addplot3[surf] {x};
  \end{axis}
\end{tikzpicture}

答案2

@Christian 的第一个回答存在问题:它不适用于数据矩阵。在这种情况下,值会映射到每个方块的角上,并且颜色是相邻数据值之间的插值,而不是值本身。我找到了以下解决方案。由于标记的大小不适应图片的大小,因此它并不完全令人满意,但这是一个开始。您还可以使用空值,如示例所示。

\begin{tikzpicture}
\begin{axis}[
  width=0.75\textwidth, height=0.75\textwidth,
  tick align=inside, unbounded coords=jump,
  xmin=-1, xmax=5, ymin=-1, ymax=5,
  point meta min=0, point meta max=8, colorbar, colormap/bluered]
  \addplot[mark=square*,only marks, scatter, scatter src=explicit,
  mark size=17]
  coordinates {
  (0,0) [0]
  (0,1) [1]
  (0,2) [2]
  (0,3) [3]
  (0,4) [4]

  (1,0) [1]
  (1,1) [2]
  (1,2) [3]
  (1,3) [4]
  (1,4) [5]

  (2,0) [2]
  (2,1) [3]
  (2,4) [6]

  (3,0) [3]
  (3,1) [4]
  (3,2) [5]
  (3,3) [6]
  (3,4) [7]

  (4,0) [4]
  (4,1) [5]
  (4,2) [6]
  (4,3) [7]
  (4,4) [8]
  };
\end{axis}
\end{tikzpicture}

解决方案

答案3

我自己想出了一个解决方案,使用散点图。这里的关键是将 x 和 y 以及标记大小调整为正确的值。

\begin{tikzpicture}[]
    \begin{axis}[x=4mm,y=4mm,xtick=\empty,ytick=\empty]
    \addplot[scatter,scatter src=explicit, 
             only marks, mark=square*,mark size=2mm]  
             coordinates {(0,1)[0]  (1,1)[.1] (2,1)[.2]
                          (0,2)[.3] (1,2)[.4] (2,2)[.5]};
    \end{axis}
\end{tikzpicture}

答案4

如果可以选择预处理数据,您也可以使用patch绘图(手册中的 4.6.13)。这样做的好处是,您可以轻松获得正确的单元格大小,并且不会出现间隙。

对于面片图,您必须手动指定构成表面的形状的坐标。通过列出每个点的矩形,您可以获得所需的结果。例如,对于矩阵

2 3
4 5

你可以这样写:

\begin{tikzpicture}
    \begin{axis}[
            % this prevents the borders of the
            % patches to be rendered
            shader=interp,
            % optional, add colorbar (here just
            % for showing that the values are
            % rendered correctly)
            colorbar,
        ]
        \addplot [
            % switch to patch mode
            patch,
            % The meta value determines the color.
            % "explicit" means that there is an extra
            % source for those, the default without
            % this option is to take the y value.
            point meta=explicit,
            % This tells pgfplots that the data is to
            % be interpreted as groups of four. Each
            % group represents the corners of a rectangle.
            patch type=rectangle,
        ] table [meta index=2] {
            x y meta
            -0.5 0.5 2
            -0.5 1.5 2
            0.5 1.5 2
            0.5 0.5 2
            
            0.5 0.5 3
            0.5 1.5 3
            1.5 1.5 3
            1.5 0.5 3
            
            -0.5 -0.5 4
            -0.5 0.5 4
            0.5 0.5 4
            0.5 -0.5 4
            
            0.5 -0.5 5
            0.5 0.5 5
            1.5 0.5 5
            1.5 -0.5 5
        };
    \end{axis}
\end{tikzpicture}

我们将每个角的点元数据设置为相同的值。这样,插值着色器就会产生单一颜色。以内联表形式输入的数据只是一个例子,您也可以从文件中加载它或使用另一种变体,如“坐标”。

渲染的 tex 文档

相关内容