我有一个 csv 文件,其中存储了 320x160 图像的像素值。我尝试使用 tikz 在 pdf 中创建图形,但编译失败,出现超出内存错误。我不想尝试增加内存,因为我只做过一次,而且我认为我无法再进一步增加内存。相反,我想了解这段占用如此多内存的代码存在什么问题:
\documentclass[margin=5mm]{standalone}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=1.18}
\newcommand\n{320}
\newcommand\m{160}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread[col sep=comma]{design.csv}\data
\foreach \x[count=\xi from 0] in {1,...,\n}{
\foreach \y[count=\yi from 0] in {1,...,\m}{
\begin{scope}[shift={(\x,-\y)}]
\pgfplotstablegetelem{\yi}{\xi}\of{\data}
\pgfmathsetmacro{\scaled}{\pgfplotsretval*100}
\draw[draw=none,fill=black!\scaled] (0,0) rectangle (1,1);
\end{scope}
}
}
\end{tikzpicture}
\end{document}
csv 文件可以是找到这里。
更新
我修改了代码并删除了范围,但仍然不起作用。这是新代码:
\documentclass[margin=5mm]{standalone}
\usepackage{pgfplots, pgfplotstable}
%\pgfplotsset{compat=1.18}
\newcommand\n{160}
\newcommand\m{80}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread[col sep=comma]{design_cnn_mbb_4.csv}\CNNbending
\foreach \x[count=\xi from 0] in {1,...,\n}{
\foreach \y[count=\yi from 0] in {1,...,\m}{
\pgfplotstablegetelem{\yi}{\xi}\of{\CNNbending}
\pgfmathsetmacro{\scaled}{\pgfplotsretval*100}
\draw[draw=none,fill=black!\scaled] (\x,\y) rectangle (\x+1,\y+1);
}
}
\end{tikzpicture}
\end{document}
更新2
我尝试使用另一种方法,这次使用内置的 pgfplots 功能,addplot
同时读取 csv 格式的表格:
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis line style={draw=none},
axis equal image,
ticks=none,
colormap/blackwhite,
colormap={reverse blackwhite}{
indices of colormap={
\pgfplotscolormaplastindexof{blackwhite},...,0 of blackwhite}
},
point meta min=0,
point meta max=1,
]
% Assuming you still want to use the same data file
\addplot+ [only marks, scatter, mark=square*, mark size=1.1, mark options={solid}, point meta={\thisrow{value}}, line width=0pt] table [x index=0,y index=1, z index=3, col sep=comma] {./design_xyz.csv};
\end{axis}
\end{tikzpicture}
\end{document}
这仍然不起作用,因为我得到了相同的内存不足错误。我使用的文件可以是找到这里。