我有一个非常特别的问题要问各位 Tikz 大神!
我正在尝试根据 3D 数据和俯视图绘制图表。最终,图像看起来应该像一个图案图,其中包含 5 x 5 个不同的图块,所有图块的颜色都与数据相对应z
。
当使用该\addplot[surf]
函数执行此操作时,tikz 仅输出 4 x 4 网格
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[view={0}{90},
scale only axis,
height=5cm,
xtick = {-1,-0.5,0,0.5,1},
colormap/blackwhite,
colorbar right,
axis equal image,
mesh/rows=5,
%shader=faceted interp,
%patch type=bilinear,
colormap/blackwhite,
colorbar right,
]
\addplot3[surf] coordinates {
(1, 1, 0.28)
(0.5, 1, 0.29)
(0, 1, 0.29)
(-0.5, 1, 0.25)
(-1, 1, 0.26)
(1, 0.5, 0.27)
(0.5, 0.5, 0.28)
(0, 0.5, 0.29)
(-0.5, 0.5, 0.29)
(-1, 0.5, 0.28)
(1, 0, 0.29)
(0.5, 0, 0.25)
(0, 0, 0.27)
(-0.5, 0, 0.25)
(-1, 0, 0.28)
(1, -0.5, 0.25)
(0.5, -0.5, 0.27)
(0, -0.5, 0.28)
(-0.5, -0.5, 0.29)
(-1, -0.5, 0.25)
(1, -1, 0.25)
(0.5, -1, 0.26)
(0, -1, 0.25)
(-0.5, -1, 0.28)
(-1, -1, 0.28)
};
\end{axis}
\end{tikzpicture}
\end{document}
...这是我能作弊得到的最接近的答案:-/
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[view={0}{90},
scale only axis,
height=5cm,
xtick = {-1,-0.5,0,0.5,1},
colormap/blackwhite,
colorbar right,
axis equal image,
enlarge x limits=0.2,
enlarge y limits=0.2,
]
\addplot3[mesh,scatter,mark=square*,mark size=14,black] coordinates {
(1, 1, 0.28)
(0.5, 1, 0.29)
(0, 1, 0.29)
(-0.5, 1, 0.25)
(-1, 1, 0.26)
(1, 0.5, 0.27)
(0.5, 0.5, 0.28)
(0, 0.5, 0.29)
(-0.5, 0.5, 0.29)
(-1, 0.5, 0.28)
(1, 0, 0.29)
(0.5, 0, 0.25)
(0, 0, 0.27)
(-0.5, 0, 0.25)
(-1, 0, 0.28)
(1, -0.5, 0.25)
(0.5, -0.5, 0.27)
(0, -0.5, 0.28)
(-0.5, -0.5, 0.29)
(-1, -0.5, 0.25)
(1, -1, 0.25)
(0.5, -1, 0.26)
(0, -1, 0.25)
(-0.5, -1, 0.28)
(-1, -1, 0.28)
};
\end{axis}
\end{tikzpicture}
\end{document}
一定有什么隐藏的功能,可以让我使用 surf 功能干净利落地完成这一操作,对吗?
感谢您阅读这篇 tldr 文章!
答案1
我相信matrix plot
这就是你想要的
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[colormap/blackwhite,colorbar right]
\addplot[matrix plot,mesh/cols=5,point meta=explicit]table[meta=z]{
x y z
1 1 0.28
0.5 1 0.29
0 1 0.29
-0.5 1 0.25
-1 1 0.26
1 0.5 0.27
0.5 0.5 0.28
0 0.5 0.29
-0.5 0.5 0.29
-1 0.5 0.28
1 0 0.29
0.5 0 0.25
0 0 0.27
-0.5 0 0.25
-1 0 0.28
1 -0.5 0.25
0.5 -0.5 0.27
0 -0.5 0.28
-0.5 -0.5 0.29
-1 -0.5 0.25
1 -1 0.25
0.5 -1 0.26
0 -1 0.25
-0.5 -1 0.28
-1 -1 0.28
};
\end{axis}
\end{tikzpicture}
\end{document}