我想在数据文件中定义一组位置和图像,
x y filename
0 0 image/path/1.png
1 1 image/path/2.png
并使用此数据文件在 tikz 环境的 2D 轴上显示图像。可能的话,我可以在表格中添加其他格式数据,如不透明度或图像大小。
这种用法似乎超出了库文档的范围,但我确信它是可行的。我只是不知道如何解决这个问题。
我认为将结果应用到 3D 中是很简单的事情。如果不是,我真的希望有一个 3D 版本。
答案1
这是一种方法。
\documentclass[tikz]{standalone}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread[col sep=space]{
x y filename
0 0 example-image-a
1 1 example-image-b
1 0 example-image-c
0 1 example-image-duck
}{\mytable}
\pgfplotstablegetrowsof{\mytable}
\pgfmathtruncatemacro{\NumRows}{\pgfplotsretval-1}
\typeout{\NumRows}
\foreach \X in {0,...,\NumRows}
{\pgfplotstablegetelem{\X}{x}\of{\mytable}
\edef\myx{\pgfplotsretval}
\pgfplotstablegetelem{\X}{y}\of{\mytable}
\edef\myy{\pgfplotsretval}
\pgfplotstablegetelem{\X}{filename}\of{\mytable}
\edef\myfilename{\pgfplotsretval}
\typeout{\myx,\myy,\myfilename}
\node at (\myx,\myy) {\includegraphics[width=8mm]{\myfilename}};
}
\end{tikzpicture}
\end{document}
第 3d 个情况类似。
\documentclass[tikz]{standalone}
\usepackage{pgfplotstable}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{70}
\begin{tikzpicture}[tdplot_main_coords]
\pgfplotstableread[col sep=space]{
x y z filename
0 0 1 example-image-a
1 1 2 example-image-b
1 0 3 example-image-c
0 1 4 example-image-duck
}{\mytable}
\pgfplotstablegetrowsof{\mytable}
\pgfmathtruncatemacro{\NumRows}{\pgfplotsretval-1}
\typeout{\NumRows}
\foreach \X in {0,...,\NumRows}
{\pgfplotstablegetelem{\X}{x}\of{\mytable}
\edef\myx{\pgfplotsretval}
\pgfplotstablegetelem{\X}{y}\of{\mytable}
\edef\myy{\pgfplotsretval}
\pgfplotstablegetelem{\X}{z}\of{\mytable}
\edef\myz{\pgfplotsretval}
\pgfplotstablegetelem{\X}{filename}\of{\mytable}
\edef\myfilename{\pgfplotsretval}
\begin{scope}[canvas is xz plane at y=\myy,transform shape]
\node at (\myx,\myz) {\includegraphics[width=8mm]{\myfilename}};
\end{scope}
}
\end{tikzpicture}
\end{document}