从 tikz 中的表中获取单个数据点

从 tikz 中的表中获取单个数据点

假设我有一堆数据,如下所示:

1,15,53
5,74,12
74,23,66

我如何存储数据其实并不重要。我可以将其以文本形式放入我的 .tex 文件中,也可以将其存储在外部 .csv 文件中。

现在,我想在我的 tikz 代码中获取单个数据点。例如,假设我想使用第 2 行、第 0 列的数据点(在本例中为数字74)。我的代码将如下所示:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}    
\node[draw] at (0,\dataPointAtRow2Column0) {test};
\end{tikzpicture}

我可以写一些东西来代替\dataPointAtRow2Column0让 tikz 在(0,74)处绘制一个节点吗?

请注意,我不是在寻找类似的解决方案。我不想使用重写我的代码\pgfplots

答案1

一种可能的方法是使用pgfplotstable\pgfplotstablegetelem

\documentclass[border=2mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotstableread[col sep=comma]{
1,15,53
5,74,12
74,23,66
}\mydata

\begin{document}
\begin{tikzpicture}
\node (o) at (0,0) {O};
\pgfplotstablegetelem{2}{0}\of\mydata
\node[draw] at (0,\pgfplotsretval pt) {test};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

只要宏仅使用扩展,它就可以用作坐标:

\documentclass{article}
\usepackage{tikz}


\def\data{
{1,15,53}
{5,74,12}
{74,23,66}
}

\makeatletter
\def\dataPointAt#1#2{\expandafter\xdpa\data{}{}\relax{#1}{#2}}

\def\xdpa#1#2\relax#3#4{%
\ifnum#3>\z@
\xdpa#2\relax{\numexpr#3-1\relax}{#4}%
\else
\xxpda#1,\relax{#4}%
\fi}

\def\xxpda#1,#2\relax#3{%
\ifnum#3>\z@
\xxdpa#2\relax{\numexpr#3-1\relax}%
\else
#1%
\fi}

\makeatother

\typeout{===\dataPointAt{2}{0}===}

\makeatother
\begin{document}
\begin{tikzpicture}    
\node[draw] at (0, \dataPointAt{2}{0}) {test};
\end{tikzpicture}

\end{document}

相关内容