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